如何在结构中解包 swift 可选值
how to unwrap swift optionals within a struct
我正在学习 swift 并找到了一个在结构中包含可选 属性 的示例。当我尝试为可选设置一个值时,我发现它是零。
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) 我收到错误消息“必须解包可选类型 'Price?' 的值以引用包装基类型 'Price' 的成员 'USD'
如何打开价格以设置美元值?
如果您还没有为 Optional
本身赋值,则不能直接设置 Optional
的 属性,因为由于可选链接,setter of usd
不会被调用。
相反,您需要将 Price
分配给 purchase.price
。
var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price(USD: 19.2)
或者如果你想分配一个 "empty" price
,那么可选链就可以了,因为现在 price
不是 nil
。
var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price()
purchase.price?.USD = 19.2
此外,您应该尝试使属性不可变(let
)默认设置为不可变(let
),并且只有在初始化后确实需要更改属性时才使属性可变(var
)。您还应该只将默认值添加到对具有默认值有意义的属性。例如,name
不应该有一个,而是应该是不可变的,其值在 init
.
中设置
struct Item{
let name: String
var price: Price?
}
var purchase = Item(name: "lampshade")
purchase.price = Price(USD: 19.2)
我正在学习 swift 并找到了一个在结构中包含可选 属性 的示例。当我尝试为可选设置一个值时,我发现它是零。
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) 我收到错误消息“必须解包可选类型 'Price?' 的值以引用包装基类型 'Price' 的成员 'USD'
如何打开价格以设置美元值?
如果您还没有为 Optional
本身赋值,则不能直接设置 Optional
的 属性,因为由于可选链接,setter of usd
不会被调用。
相反,您需要将 Price
分配给 purchase.price
。
var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price(USD: 19.2)
或者如果你想分配一个 "empty" price
,那么可选链就可以了,因为现在 price
不是 nil
。
var purchase:Item = Item()
purchase.name = "lampshade"
purchase.price = Price()
purchase.price?.USD = 19.2
此外,您应该尝试使属性不可变(let
)默认设置为不可变(let
),并且只有在初始化后确实需要更改属性时才使属性可变(var
)。您还应该只将默认值添加到对具有默认值有意义的属性。例如,name
不应该有一个,而是应该是不可变的,其值在 init
.
struct Item{
let name: String
var price: Price?
}
var purchase = Item(name: "lampshade")
purchase.price = Price(USD: 19.2)