【发布时间】:2017-04-05 05:10:16
【问题描述】:
let allPlaces = resultsArray.map({ (param) -> Places in
return Places(dictionary: param )
})
print("All Places \(allPlaces[0].placeName)")
以上代码的输出为:
所有地方可选(“地铁”)
在下面的代码中,var 不是可选的。但是 print 语句将其打印为可选。它不应该打印All Places "Subway"吗?
class Places: NSObject {
var name:String!
init(dictionary:Dictionary<String, Any>) {
name = dictionary["name"] as? String
}
}
【问题讨论】:
-
从这个地方字典["name"] 为?字符串它是可选的。将其更改为字典 [“名称”] 为!字符串会给你非可选的
-
试试这个
print("All Places " + allPlaces[0].placeName) -
dictionary["name"] as? String使其成为可选值。 -
见Swift 3 incorrect string interpolation with implicitly unwrapped Optionals——一个IUO被视为一个强可选,只要它可以被类型检查为一个。
-
当你把
!或?放在一个“类型”前面时,它实际上是一个Optional类型。唯一的区别是您告诉编译器,当您读取name属性时,您不想处理它的可空性(因为您确定它永远不会是nil),但它仍然可能是nil。说到这里,你可以简单地将属性定义为var name:String。
标签: ios swift forced-unwrapping