SwiftUI - 具有可识别协议的自定义标识符
SwiftUI - Custom Identifier with Identifiable Protocol
我想知道是否可以用自定义标识符覆盖标准标识符。
我有一个简单的结构:
struct MyUserData: Identifiable {
var userId: String
var userFirstName: String
var userLastName: String
}
但是,如果结构中没有 var id: ObjectIdentifier
行,Identifiable 协议将无法工作。同时,我不想使用“id”这个名字。 userId 在我的模型中也是唯一的(它是一个 UUID)。有没有办法告诉可识别协议接受“userId”而不是“id”?
谢谢!
您可以使用任何 Hashable
作为 id
属性 所要求的 Identifiable
:
extension MyUserData: Identifiable {
var id: String { userId }
}
不幸的是,Identifiable 需要一个名为 id 的 属性。解决它的最简单方法是对结构使用名为 id 的计算 属性。
struct MyUserData: Identifiable {
var userId: String
var userFirstName: String
var userLastName: String
var id: String {
userId
}
}
我想你需要这个:
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
}
我想知道是否可以用自定义标识符覆盖标准标识符。
我有一个简单的结构:
struct MyUserData: Identifiable {
var userId: String
var userFirstName: String
var userLastName: String
}
但是,如果结构中没有 var id: ObjectIdentifier
行,Identifiable 协议将无法工作。同时,我不想使用“id”这个名字。 userId 在我的模型中也是唯一的(它是一个 UUID)。有没有办法告诉可识别协议接受“userId”而不是“id”?
谢谢!
您可以使用任何 Hashable
作为 id
属性 所要求的 Identifiable
:
extension MyUserData: Identifiable {
var id: String { userId }
}
不幸的是,Identifiable 需要一个名为 id 的 属性。解决它的最简单方法是对结构使用名为 id 的计算 属性。
struct MyUserData: Identifiable {
var userId: String
var userFirstName: String
var userLastName: String
var id: String {
userId
}
}
我想你需要这个:
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
}