无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)
Posted
技术标签:
【中文标题】无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)【英文标题】:Could not cast value of type '__NSArrayI' (0x106d27d88) to 'NSString' (0x107be3c40) 【发布时间】:2017-06-28 07:36:07 【问题描述】:我正在尝试下载和过滤 json 数据。过滤 json 数据后,我打印了工作正常的过滤数据。但是当我尝试将该数据附加到字符串类型的数组时,它会崩溃并且错误是:-
无法将类型“__NSArrayI”(0x106d27d88)的值转换为“NSString” (0x107be3c40)。
code sample and output
【问题讨论】:
请发布您的代码而不是屏幕截图。 另外,您的productName
实际上是一个数组,它包含所有这些元素,因此无法将其转换为字符串。
@ShamasS 的两个 cmets 上的 +1。此外,您似乎使用 Swift 3,摆脱了 NSArray、NSString 和其他 Foundation(也是 Objective-C)的东西,并且更喜欢 Swift 的东西(没有NS
前缀几乎一样)。
发帖时尝试概括问题,以便更容易搜索和上下文化。例如0x106d27d88 仅在问题发生时适用于您的机器。
【参考方案1】:
将该 productName 转换为这样的字符串数组。 [字符串]
let productName = jsonObj?.value(forKey: "name") as! [String]
然后点击此链接
1) https://www.hackingwithswift.com/example-code/arrays/how-to-join-an-array-of-strings-into-a-single-string
2) How do I convert a Swift Array to a String?
例子
let productName1 = ["1", "2", "3"]
var arrayForName1 = [String]()
arrayForName1 = ["name"]
let str = productName1.joined(separator: "")
// ["name", "123"]
// or
let str1 = productName1.joined(separator: ", ")
// ["name", "1, 2, 3"]
arrayForName1.append(str)
【讨论】:
【参考方案2】:您的 productName
是一个数组,您将其转换为 String 以便导致您的问题。您有两种选择来修复此基础:
验证您的 productName
数组并找到要附加到您的 arrayForName1
数组的实际字符串的正确索引。所以你的代码看起来像
arrayForName1.append(productName[0])
如果您的productName
是一个字符串数组,并且您想将它们全部添加到arrayForName1
,只需使用此代码
arrayForName1 += productName
【讨论】:
【参考方案3】:到您的 json 数据 数组中包含任何参数(例如:Number = ["1", "2", "3"])
var Number1:String? = ""
var NumberList:[String] = []
if let Number_from = anItem["Number"] as? String
self.Number1 = Number_from
self.NumberList.append(self.Number1!)
else
self.NumberList.append("Not Available")
【讨论】:
以上是关于无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)的主要内容,如果未能解决你的问题,请参考以下文章
无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)
Cordova iOS 3.6.3+ 问题 - [__NSArrayI 长度]:无法识别的选择器
从字典访问 FlutterStandardTypedData 时出现“[__NSArrayI 数据]:无法识别的选择器”
为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?
为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?