簡體   English   中英

如何在結構中解開 swift 選項

[英]how to unwrap swift optionals within a struct

我正在學習 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) 我收到錯誤“可選類型‘價格’的值? 必須打開包裝以引用包裝基本類型“價格”的成員“美元”

如何打開價格以設置美元值?

如果您沒有為Optional本身賦值,則不能直接設置Optional的屬性,因為由於可選鏈接,不會調用usd的設置器。

相反,您需要為purchase.price分配一個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM