我从服务器获取JSON数据。
这是我的代码:
let myPTYPEIntegerValue : NSInteger? = (allData as! NSDictionary ).value(forKey: "PTYPE") as? NSInteger
if myPTYPEIntegerValue != nil{
help.myPTYPE = String.init(describing: myPTYPEIntegerValue)
}
let myIdIntegerValue : NSInteger? = (allData as! NSDictionary ).value(forKey: "ID") as? NSInteger
if myIdIntegerValue != nil{
help.myId = String.init(describing: myIdIntegerValue)
}
let jsonIDIntegerValue : NSInteger? = (allData as! NSDictionary ).value(forKey: "UID") as? NSInteger
if jsonIDIntegerValue != nil{
help.myUID = String.init(describing: jsonIDIntegerValue!)
print(help.myUID)
}
但它正在显示
Optional(3)
Optional(2930)
Optional(238)
如何在这里打开可选项?我的代码有什么问题?
答案 0 :(得分:6)
您可以使用可选绑定来打开可选项:
if let jsonIDIntegerValue = jsonIDIntegerValue {
// jsonIDIntegerValue is now a non-optional local constant
help.myUID = String(jsonIDIntegerValue)
print(help.myUID)
}
这摆脱了强行展开的需要。有关详细信息,请参阅Swift Guide(查找 Optional Binding 部分)。
答案 1 :(得分:2)
help.myUID
是可选。您应该在打印时打开它:
print(help.myUID!)
请注意,在这种情况下,您可以安全地展开,因为您检查了该值不是nil
。
答案 2 :(得分:1)
而不是检查nil
然后使用可选项,就像你一样
if myIdIntegerValue != nil{
help.myId = String.init(describing: myIdIntegerValue)
}
你应该使用if let
语法,就像这样
if let myIdIntegerValue = myIdIntegerValue {
help.myId = String.init(describing: myIdIntegerValue)
}
在该示例中,您使用新的myIdIntegerValue : NSInteger!
隐藏原始myIdIntegerValue : NSInteger
变量,该变量不再是可选的
答案 3 :(得分:0)
你没有打开可选的
这看起来应该是
if myIdIntegerValue != nil{
help.myId = String.init(describing: myIdIntegerValue)
}
这......
if let myIdIntegerValueUnwrapped = myIdIntegerValue {
help.myId = String.init(describing: myIdIntegerValueUnwrapped)
print(myIdIntegerValue)
}
任何时候你想在可选项中获取值。