Swift中奇怪的可选行为

时间:2016-09-21 05:33:03

标签: ios iphone swift optional

我在Swift中创建了自己的类,如下所示。

class Product: NSObject {

    var product_id:Int?
    var product_number:String?
    var product_price:Float?
    var product_descrption:String?
}

现在我在每个属性中设置值

        let p=Product()
        p.product_id=1
        p.product_price=220.22
        p.productdescrption="Some description"
        p.product_number="W2_23_233"

但是当我从价格中得到价值然后价格时,我得到的价值就像“可选220.22”但我没有在说明中附加词“可选” 。为了解决这个问题,我添加了“!”来展开浮动的值但是我没有必要为字符串执行此操作,请说明原因这发生了吗?

3 个答案:

答案 0 :(得分:0)

如果要打印任何这些值,请说“可选”(...)。如果要将值分配给标签,则不包括Optional(...),当您使用print()打印值时,它显示Optional(...)的原因只是为了向您显示可选的。为安全起见,请尝试使用if let,而不是使用!

您的代码示例

if let id = p.product_id {
    print(id) //Does not contain Optional()
}

您也可以将它们组合起来,一次完成所有这些操作。 (只有在你不想打印时才这样做,除非所有值都是非零的)

if let id = p.product_id,
   let price = p.product_price, 
   let description = p.productdescrption,
   let productNumber = p.product_number {
       //Enter code here that does something with these values
}

注意,如果你不在swift 3上,我相信你只需要在第一个条件下写一个。

答案 1 :(得分:0)

如果打印任何可选变量而不解包,无论它是什么类型,Optional都会附加到变量的值。

print(p.product_price)将打印可选(220.220001)

print(p.product_descrption)将打印可选(“某些说明”)

要仅打印您需要打开可选变量的值。

print(p.product_price!)将打印 220.22

print(p.product_descrption!)将打印部分说明

这种强制解包只有在选项不包含nil时才有效。否则它会给你一个运行时错误。 因此,要检查nil,您可以使用if let声明。

答案 2 :(得分:0)

无论什么类型的变量。如果为可选变量赋值,则它始终包含在Optional(...)

可选,无需强制解包:

Possible minimum

输出:
product_price =可选(220.22)
product_descrption =可选(某些描述)

强制解包时可选:

print("product_price = \(p.product_price) \n product_descrption = \(p.product_descrption)")

输出:
product_price = 220.22
product_descrption =一些描述