快速编译错误:从"字符串?!"向下转换为"字符串"仅解包选项;你的意思是使用"!!"吗?



升级到cocoapods 1.0后,我收到以下代码行的编译错误:

var strName = String()
var strEmail = String()
var strFacebookID = String()
var strPassword = String()
var objHelper = Helper()
....
let strFirstName = result["first_name"] as! String
let strLastName = result["last_name"] as! String
self.strName = strFirstName + "_" + strLastName
self.strEmail = result["email"] as! String
self.strFacebookID = result["id"] as! String
从"字符串

?!"向下转换为"字符串"只会解开可选包; 你的意思是使用"!!"吗?

以下是错误的详细屏幕截图:https://i.stack.imgur.com/Z5Ssz.jpg

更新:更多代码在这里: https://gist.github.com/anonymous/9c91c2eb1ccf269e78a118970468d1e8

错误消息说result本身是可选的,因此您必须分别解开result和值的包装。

let strFirstName = result!["first_name"] as! String

或者更好地使用可选装订,以提高安全性和减少铸造类型

if let userData = result as? [String:String] {
   let strFirstName = userData["first_name"]!
   let strLastName = userData["last_name"]!
}

result["key"]本身返回一个 optional,因为字典中可能存在该键。

您需要首先解开该可选包,然后将返回的值强制转换为字符串。试试这个:

let strFirstName = result["first_name"]! as! String

这是一种代码气味,这是很多铸造。也许那本字典应该是[String : String]型的,而不是现在的样子。

对我来说,

只是删除as! String起作用了。所以代替,

let strFirstName = result!["first_name"] as! String

替换为,

let strFirstName = result!["first_name"]

最新更新