首页 > 解决方案 > 如何在结构中解开快速选项

问题描述

我正在快速学习并找到一个在结构中包含可选属性的示例。当我尝试为可选设置一个值时,我发现它是 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) 我收到错误“可选类型‘价格’的值?必须解包以引用已包装基本类型“价格”的成员“美元”

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

标签: swiftoptional

解决方案


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

相反,您需要分配一个Priceto purchase.price

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

或者,如果你想分配一个 "empty" price,那么可选的链接就可以了,因为 nowprice不是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)

推荐阅读