我正在学习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”
如何解开价格以设置美元价值?
[如果您没有为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)