在 Apple [iOS App Dev Tutorial](截至 1 月 22 日)(https://developer.apple.com/tutorials/app-dev-training)中,在創建導航層次結構部分下,我們擴展了我們擁有的結構定義。
我曾嘗試閱讀有關擴展的Swift 檔案,但并不真正理解為什么要在這里這樣做。該檔案討論了擴展系統型別,例如向系統型別添加額外的屬性Double,但沒有向我們完全控制的東西添加額外的屬性,例如我們自己的結構。
我確信這是一個最佳實踐,因為這是一個 Apple 教程,但他們并沒有很好地解釋它。
這是他們希望您撰寫的代碼示例:
import SwiftUI
struct DailyScrum: Identifiable {
let id: UUID
var title: String
var attendees: [Attendee]
var lengthInMinutes: Int
var theme: Theme
init(id: UUID = UUID(), title: String, attendees: [String], lengthInMinutes: Int, theme: Theme) {
self.id = id
self.title = title
self.attendees = attendees.map { Attendee(name: $0) }
self.lengthInMinutes = lengthInMinutes
self.theme = theme
}
}
extension DailyScrum {
struct Attendee: Identifiable {
let id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}
}
我不確定為什么Attendee必須在擴展中定義結構。例如,這也有效:
import SwiftUI
struct Attendee: Identifiable {
let id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}
struct DailyScrum: Identifiable {
let id: UUID
var title: String
var attendees: [Attendee]
var lengthInMinutes: Int
var theme: Theme
init(id: UUID = UUID(), title: String, attendees: [String], lengthInMinutes: Int, theme: Theme) {
self.id = id
self.title = title
self.attendees = attendees.map { Attendee(name: $0) }
self.lengthInMinutes = lengthInMinutes
self.theme = theme
}
}
我只是不確定你為什么會做一個而不是另一個。
uj5u.com熱心網友回復:
它是樣式,并且在這種情況下也關注代碼
您最初撰寫的型別是
DailyScrum.Attendee
如果您將其更改為第二個版本,您將擁有 2 個獨立的獨立型別。
Attendee
和
DailyScrum
如果不看教程,我會假設還有另一種型別的Attendee. 如..
Conference.Attendee
或者
WeeklyScrum.Attendee
但正如你所指出的,只有當它們像同音異義詞一樣不同時,這才有意義。有些樣品是...
Bird.Crane
Construction.Crane
或者
Dog.Bark
Tree.Bark
如果您使用的只是一個id和一個,name那么沒有必要擁有一個單獨的資料結構。
uj5u.com熱心網友回復:
在本教程中,我認為這是一種模式選擇,以便資料模型更緊密地反映 SwiftUI 布局,以便于理解。
與會者僅顯示為 detailView 的子視圖,使用 ForEach(...) 生成 VStack。因此,在這種不使用 MVVM 的情況下,將資料模型清晰地映射到視圖是有意義的,并在 Code Pattern 中明確指出,參加者型別僅出現在 DailyScrum 的實體中,就像與會者詳細資訊僅顯示在 detailView 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406512.html
標籤:
