将代码从 swift 2 转换为 xcode 8 中的 swift 3 后,对成员下标的引用不明确
ambiguous reference to member subscript after conversion of code from swift 2 to swift 3 in xcode 8
我是 swift 编程新手。将此代码从 swift 2 更新为 swift 3
后,我遇到了这个问题
Swift 2 个代码是
let dicConversation = self.conversationListArray?[indexPath.row] as! NSMutableDictionary
现在我在 swift 3 中成功转换了这段代码,将其拆分为多个部分
Swift3码
let accountArrayDict = self.conversationListArray?[indexPath.row] as? Dictionary<String, Any>
let accountArray : [String : String] = accountArrayDict?["accounts"] as! [String : String]
代码在 swift 3 中成功转换,但我不知道如何转换下面这一行:
cell.conversationTitle?.text = accountArray?[0]["displayName"] as? String
下面是我尝试过但在第一部分显示错误的方法。第二个现在可以了
cell.conversationTitle?.text = accountArray[0] as![String]
let accountArray : [String] = accountArrayDict?["displayName"] as! [String]
首先,从不 将(非可选)table 视图的数据源数组声明为可选。
var conversationListArray = [[String:Any]]()
这避免了很多问号和类型转换,
编译器知道 accountArrayDict
是 [String:Any]
let accountArrayDict = self.conversationListArray[indexPath.row]
名称 accountArray
暗示类型是 数组 所以它是
let accountArray = accountArrayDict["accounts"] as! [[String : String]]
那你可以写
cell.conversationTitle?.text = accountArray[0]["displayName"]
因为编译器知道内部字典有 String
值,所以你也摆脱了这种类型转换。这是一个很好的例子,为什么 Swift 本机类型比 Foundation NS(Mutable)...
集合类型更有效。
尽管如此,对于像这样的嵌套数据模型,强烈建议使用自定义结构或 class。
我是 swift 编程新手。将此代码从 swift 2 更新为 swift 3
后,我遇到了这个问题Swift 2 个代码是
let dicConversation = self.conversationListArray?[indexPath.row] as! NSMutableDictionary
现在我在 swift 3 中成功转换了这段代码,将其拆分为多个部分
Swift3码
let accountArrayDict = self.conversationListArray?[indexPath.row] as? Dictionary<String, Any>
let accountArray : [String : String] = accountArrayDict?["accounts"] as! [String : String]
代码在 swift 3 中成功转换,但我不知道如何转换下面这一行:
cell.conversationTitle?.text = accountArray?[0]["displayName"] as? String
下面是我尝试过但在第一部分显示错误的方法。第二个现在可以了
cell.conversationTitle?.text = accountArray[0] as![String]
let accountArray : [String] = accountArrayDict?["displayName"] as! [String]
首先,从不 将(非可选)table 视图的数据源数组声明为可选。
var conversationListArray = [[String:Any]]()
这避免了很多问号和类型转换,
编译器知道 accountArrayDict
是 [String:Any]
let accountArrayDict = self.conversationListArray[indexPath.row]
名称 accountArray
暗示类型是 数组 所以它是
let accountArray = accountArrayDict["accounts"] as! [[String : String]]
那你可以写
cell.conversationTitle?.text = accountArray[0]["displayName"]
因为编译器知道内部字典有 String
值,所以你也摆脱了这种类型转换。这是一个很好的例子,为什么 Swift 本机类型比 Foundation NS(Mutable)...
集合类型更有效。
尽管如此,对于像这样的嵌套数据模型,强烈建议使用自定义结构或 class。