Ios Swift NSObject属性不是可选的,但打印时可选
上述代码的输出为: 所有地点可选(“地铁”) 在下面的代码中,var不是可选的。但是print语句将其打印为可选。它是否应该打印所有位置的“Subway”Ios Swift NSObject属性不是可选的,但打印时可选,ios,swift,forced-unwrapping,Ios,Swift,Forced Unwrapping,上述代码的输出为: 所有地点可选(“地铁”) 在下面的代码中,var不是可选的。但是print语句将其打印为可选。它是否应该打印所有位置的“Subway” let allPlaces = resultsArray.map({ (param) -> Places in return Places(dictionary: param ) }) print("All P
let allPlaces = resultsArray.map({ (param) -> Places in
return Places(dictionary: param )
})
print("All Places \(allPlaces[0].placeName)")
类位置:NSObject{
变量名称:字符串!
init(字典:字典){
名称=字典[“名称”]作为?字符串
}
}
将“as?”更改为“as!”强>
- 感叹号表示绝对清楚
- 问号表示可选绑定
class Places: NSObject {
var name:String!
init(dictionary:Dictionary<String, Any>) {
name = dictionary["name"] as? String
}
}
至
print("All Places \(allPlaces[0].placeName)")
您已将名称声明为隐式展开可选。从Swift 3
开始,仅当需要在本地进行类型检查时,才将强制展开。否则,它将被视为正常可选
var name:String!
这里不涉及类型检查,所以名称仍然是可选的
如果你喜欢
print("All Places \(allPlaces[0].name)")
输出将是“所有地方地铁”
或者你需要强制打开它
let name:String = allPlaces[0].name
print("All Places \(name)")
如果
名称
为零,这将导致崩溃,您应该注意它。如果名称可能为零,则使用var name:String?
以便编译器强制您显式展开。从此处开始词典[“name”]as?它给出的字符串是可选的。将其更改为dictionary[“name”]as!字符串将为您提供非可选的打印方式(“所有位置”+所有位置[0]。地名)字典[“名称”]as?字符串
使其成为可选值。请参阅–只要可以将IUO作为一个类型检查,它就会被视为强可选。无论何时放置
或?
在“type”前面,它实际上是一个可选的类型。唯一的区别是,您告诉编译器,当您读取name
属性时,您不想处理它的可空性(“因为您确定它永远不会是nil
),但它仍然可能是nil
。这么说来,您可以简单地将属性定义为var name:String
。下面的答案@theodore cha如果“name”键不可用怎么办?@andyPaul我想。。使用双问号(设置默认值)//name=dictionary[“name”]as?一串“”@andyPaul双问号:如果值不可用,请保存默认值(“”@VinodKumar我添加了其他方法。
print("All Places \(allPlaces[0].name)")
let name:String = allPlaces[0].name
print("All Places \(name)")
print("All Places \(allPlaces[0].name!)")