如何在结构中解开swift可选内容

问题描述 投票:0回答:1

我正在学习Swift,并找到了一个在结构内包含可选属性的示例。当我尝试将值设置为可选时,我发现它为nil。

struct Price{
    var USD: Double = 0.0
    var CAD: Double = 0.0
}
struct Item{
    var name: String = "not defined"
    var price: Price?
}


var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price?.USD = 19.2


print("purchase name is \(purchase.name), purchase price is \(purchase.price?.USD)")

产量

purchase name is lampshade, purchase price is nil

如果尝试(purchase.price.USD),则会收到错误消息“可选类型'价格?必须解包以引用基本类型为“价格”的成员“ USD”

如何解开价格以设置美元价值?

swift optional
1个回答
1
投票

[如果您没有为Optional本身分配值,则不能直接设置Optional的属性,因为由于可选的链接,usd的设置器将不会被调用。

相反,您需要将Price分配给purchase.price

var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price(USD: 19.2)

或者,如果您要分配“空” price,则可以在其上进行可选链接,因为现在price不是nil

var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price()
purchase.price?.USD = 19.2

[此外,您应该尝试使属性默认为不可变(let),并且只有在初始化后确实需要更改属性时,才使属性可变(var)。您还应该仅在属性具有默认值的情况下将默认值添加到属性。例如,name不应有一个,而应在init中设置其值是不可变的。

struct Item{
    let name: String
    var price: Price?
}


var purchase = Item(name: "lampshade")
purchase.price = Price(USD: 19.2)
© www.soinside.com 2019 - 2024. All rights reserved.