Вы не можете напрямую установить свойство 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)