gpt4 book ai didi

swift - 将结构作为泛型类型传递并访问该泛型类型的属性

转载 作者:行者123 更新时间:2023-12-05 02:27:13 24 4
gpt4 key购买 nike

我正在开发一个 Swift 包,其中一个选项是传入泛型类型 (Person),然后 GenericStruct 可以使用该类型的属性in。问题显然是泛型 T 不知道传入的是什么。有没有办法定义要访问泛型 T 的属性?

struct Person: Equatable {
var name: String
var height: Double
}

struct ContentView: View {
@State private var james = Person(name: "James", height: 175.0)

var body: some View {
GenericStruct(person: $james)
}
}

struct GenericStruct<T: Equatable>: View {
@Binding var person: T

var body: some View {
Text(person.name)) // This line.
}
}

我想在将 Person 传递给 GenericStruct 时专门传递要访问的属性。该属性不会总是 name,它可以是我在 Person 中定义的任何内容。例如:

GenericStruct(person: $james, use: Person.name)

最佳答案

这不正是一个协议(protocol)吗?

protocol NameProviding {
var name: String { get }
}

struct GenericStruct<T: Equatable & NameProviding>: View { ... }

或者问题中还有更微妙的部分?


最好的方法是传递一个字符串绑定(bind):

struct GenericStruct: View {
@Binding var text: String

var body: some View {
Text(text)) // This line.
}
}

GenericStruct(text: $james.name)

但关键路径是可能的。在这种特殊情况下,它只是有点笨拙且不太灵活:

// Should be the syntax, but I haven't double-checked it.
struct GenericStruct<T: Equatable>: View {
@Binding var person: T
var use: KeyPath<T, String>

var body: some View {
Text(person[keyPath: use]))
}
}

GenericStruct(person: $james, use: \.name)

关于swift - 将结构作为泛型类型传递并访问该泛型类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73340075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com