我有以下結構:
extension Models {
struct Book: Identifiable {
let id: UUID
var title: String
var pagesCount: Int
var cover: Optional<Cover>;
struct Cover {
let image: String
init(image: String) {
self.image = image
}
}
init(id: UUID = UUID(), title: String, pagesCount: Int, cover: Optional<Cover> = nil) {
self.id = id
self.title = title
self.pagesCount = pagesCount
self.cover = cover
}
}
}
extension Models.Book {
static let sampleData: Models.Book = Models.Book(title: "Orconomics", pagesCount: 100, cover: Models.Book.Cover(image: "actual_image.png"))
}
我正在創建一個顯示每個“模型”書的 SwiftUI 視圖。
我已將Cover引數設為可選,因為有些書沒有封面,Models.Book.Cover結構有一個非可選屬性image。
這是body我的 SwiftUI 檔案中的內容:
HStack {
if book.cover != nil {
Text(book.cover?.image ?? "test") // <- can I avoid this?
}
}
book.cover != nil對 Swift 來說還不夠嗎?為什么我需要“默認值”(test)和?之后book.cover?
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
HStack {
if let cover = book.cover {
Text(cover.image)
}
}
uj5u.com熱心網友回復:
我用來做的是在我的視圖模型中處理這個,所以我猜你應該在你的初始化中有一個默認值,所以我不需要在視圖中處理它,因為我喜歡視圖是愚蠢的而不是處理很多邏輯。
guard如果你想添加一個 else 選項,我認為你應該使用 insteaad ,IMO 守衛更具可讀性,如果不像if let前面提到的那樣應該沒問題。
uj5u.com熱心網友回復:
View?符合View. 所以只需使用map.
book.cover?.image.map(Text.init)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450989.html
標籤:迅速
上一篇:Swift:初始化程式'init(_:rowContent:)'要求'HealthStat'符合'Identifiable'
下一篇:初始賦值后使變數不可變
