用继承自同一协议的自定义数据模型建立列表(ForEach)。

问题描述 投票:0回答:1

基本上,我正在用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 出现。

ios swift swiftui
1个回答
1
投票

你可以在协议中声明一些常用的属性,比如下面的内容

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
...
© www.soinside.com 2019 - 2024. All rights reserved.