展开可选值

时间:2017-09-01 11:15:43

标签: ios swift

我从服务器获取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)

如何在这里打开可选项?我的代码有什么问题?

4 个答案:

答案 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)
}

任何时候你想在可选项中获取值。

相关问题