我想创建一个通用的PreferenceKey,但是我的代码中有两个问题。
首先,我需要为T定义(),以便像String、Int这样的普通类型可以使用String()或Int()。因此,我需要逐成员初始化器以支持T。
其次,Xcode抱怨我的PreferenceKey未遵循Equatable协议,而我已经实现了<T: Equatable>。如何解决这两个问题?谢谢。
struct ContentView: View {
@State private var stringOfText: String = "Hello, world!"
var body: some View {
Text(stringOfText)
.preference(key: CustomPreferenceKey.self, value: stringOfText)
.onPreferenceChange(CustomPreferenceKey.self) { newValue in print(newValue) }
}
}
struct CustomPreferenceKey<T: Equatable>: PreferenceKey {
static var defaultValue: T { get { return T() } }
static func reduce(value: inout T, nextValue: () -> T) { value = nextValue() }
}