这段代码在
Swift 2中工作正常:
guard let userData = responseData["UserProfile"] as? [String : AnyObject] else { return } var userProfileFieldsDict = [String: String]() if let profileUsername = userData["Username"] as? Nsstring { userProfileFieldsDict["username"] = String(profileUsername) } if let profileReputationpoints = userData["ReputationPoints"] as? NSNumber { userProfileFieldsDict["reputation"] = String(profileReputationpoints) }
但是,在Swift 3中,它会在userProfileFieldsDict [“reputation”]上引发错误
init has been renamed to init(describing:)
我的问题是为什么它会触发该行而不是userProfileFieldsDict [“username”]赋值行,以及如何修复它?我假设它是因为我正在将一个NSNumber转换为String,但我无法理解为什么这很重要.
NSNumber是一个非常通用的类.它可以是从bool到long甚至是char的任何东西.所以编译器真的不确定确切的数据类型,因此它无法调用正确的String构造函数.
而是使用String(describe :)构造函数,如下所示
userProfileFieldsDict["reputation"] = String(describing: profileReputationpoints)
关于它,这里有更多info.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。