基本上,我正在用SwitUI构建一个应用程序,我有4个数据模型,它们都是继承自同一个协议。
protocol Item: Codable
{
}
// Intializing Identity Data type which supports:
struct IdentityItem: Item, Identifiable {
var kind: String = "IdentityItem"
var id: String
let name: String
let middleName: String
let lastName: String
let gender: String
let birthDate: Date
let nationalID: String
}
// Intializing Note Data type which supports:
struct NoteItem: Item, Identifiable {
var kind: String = "NoteItem"
var id: String
let title: String
let date: Date
let textBlob: String
}
// Intializing Credit Card Data type which supports:
struct CreditCardItem: Item, Identifiable {
var kind: String = "CreditCardItem"
var id: String
let title: String
let bankName: String
let cardNumber: String
let cardHolderName: String
let expirationDate: Date
let cardPin: Int
let cardCvv: Int
}
// Intializing Login Credentials Data type which supports:
struct LoginItem: Item, Identifiable {
var kind: String = "LoginItem"
var id: String
let title: String
let username: String
let email: String
let password: String
let website: String
}
比方说,我有3个不同的项目在一个数组中,像这样。
@State var itemArray: [Item]() = [creditItem1,noteItem2,loginItem3]
当我创建这些项目的列表时,我无法访问每个项目的属性来创建各种参数的自定义视图。
我怎样才能从每个 itemArray 对象的参数中建立一个具有自定义视图的 List?
在进行 ForEach(itemArray, id: \.self){ item in }
对于id的说法只是 .self
出现。
你可以在协议中声明一些常用的属性,比如下面的内容
protocol Item: Codable
{
var id: String { get set } // << here !!
var kind: String { get set } // << here !!
}
// Intializing Identity Data type which supports:
struct IdentityItem: Item, Identifiable {
var kind: String = "IdentityItem"
var id: String
// .. other code here
...