Swift 2.2破坏了可选项/解包可选项。

4

Swift 2.2 几乎破坏了我的所有代码。即使是这个简单的字符串分配到标签上也不再起作用:

cell.categoryName.text = peopleArray![indexPath.row]["Name"] as? String

该错误提示为“从'String ?!'向下转换为'String'仅取消可选项,您是否想使用'!!'?”。
现在我需要做哪些更改?
编辑:
更多问题:
if (dict["data"]!["DataDetails"] as! NSArray).count == 0 {
}

由于这个问题,我得到了一个分段错误,并且错误显示为:警告:从 'String?!' 转换为不相关的类型 'NSArray' 总是失败 更新: 我在我的类中使用了 NSDictionaries、NSArrays,这似乎引起了问题。将所有字面量从 Obj-C 更改为 Swift 可以使代码正常工作。因此,我也建议其他开发人员优先选择 Swift 字面量。

2
使用 peopleArray!["Name"] as! String,但我建议不要使用强制解包,而是使用 if let。 - Bhavin Bhadani
Swift 2.2 在可选类型推断方面存在回归性问题 -- 您的问题可能源于此:https://dev59.com/3FoV5IYBdhLWcg3wgu_w - schmittsfn
请问您能否写一下如何定义peopleArray数组? - Sohil R. Memon
1个回答

0

使用 Swift 类型和 Objective-C NS... 类型时似乎存在一些细微差别。

例如:

let dic:NSDictionary? = ["a":"a"]

let str:NSString? = dic!["a"] as? NSString

let dic2:Dictionary? = ["b":"b"]

let str2:String? = dic2!["b"] //dont need to do any casting, already optional

print(str)
print(str2)

打印

Optional(a)
Optional("b")

所以根据你的数组/字典如何定义,你可能需要不同的类型转换/可选项拆包。


不,它不起作用。但是如果我将peopleArray!["Name"]!!用作字符串,那么它就可以工作,但我希望这是可选的。 - Bhavuk Jain
它被定义为NSMutableArray。 - Bhavuk Jain
你是指NSMutableDictionary吗?因为你正在使用字符串进行“索引”。 - Fonix
我更新了我的问题。只是为了参考,可选项不起作用。 - Bhavuk Jain
根据peopleArray![indexPath.row]返回的类型,您可能需要首先将其转换为NSDictionary,然后访问字典中想要的内容。不幸的是,NSArray始终返回AnyObject,而Swift数组返回分配的类型。您能否准确展示如何分配字典和数组?这对回答您的问题非常重要。或者,如果可以的话,请不要在Swift中使用NSArray和NSDictionary。 - Fonix
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接