10

我想知道是否可以用自定义标识符覆盖标准标识符。

我有一个简单的结构:

struct MyUserData: Identifiable {
    var userId: String
    var userFirstName: String
    var userLastName: String
}

var id: ObjectIdentifier但是,如果结构内没有行,可识别协议将无法工作。同时,我不想使用“id”名称。userId 在我的模型中也是唯一的(它是一个 UUID)。有没有办法告诉可识别协议接受“userId”而不是“id”?

谢谢!

4

3 回答 3

17

您可以使用 anyHashable作为id所需的属性Identifiable

extension MyUserData: Identifiable {
  var id: String { userId }
}
于 2020-12-21T15:53:03.613 回答
5

不幸的是,Identifiable 需要一个名为 id 的属性。解决它的最简单方法是在结构中使用名为 id 的计算属性。

struct MyUserData: Identifiable {
    var userId: String
    var userFirstName: String
    var userLastName: String

    var id: String {
        userId
    }
}
于 2020-12-21T15:53:51.723 回答
0

我想你需要这个:

import SwiftUI

struct MyUserData
{
    var userId: String
    var userFirstName: String
    var userLastName: String
}

struct ContentView: View {
    
    @State var arrayOfMyUserData: [MyUserData] = [MyUserData]()
    
    var body: some View {
        
        List
        {
            
            ForEach(arrayOfMyUserData, id: \.userId)  { item in
                Text("FirstName: " + item.userFirstName) + Text("  LastName: " + item.userLastName)
            }
            
        }
        .onAppear() {
            
            arrayOfMyUserData = [MyUserData(userId: "userId1", userFirstName: "willy", userLastName: "will"),
                                 MyUserData(userId: "userId2", userFirstName: "bob", userLastName: "mccarthy"),
                                 MyUserData(userId: "userId3", userFirstName: "james", userLastName: "rodriguez")
            ]
            
        }
        
        
    }
}

或者你可以使用这个:

struct MyUserData
{
    let userId: UUID = UUID()
    var userFirstName: String
    var userLastName: String
}
于 2020-12-21T18:18:59.527 回答