【发布时间】:2021-03-26 11:27:46
【问题描述】:
我想制作一个 Generic PreferenceKey,但我的代码有 2 个问题。
首先我需要为 T 定义 (),以便使用像 String、Int 这样的普通类型作为 String() 或 Int() 所以我需要 memberwise initializer for T。
第二个 Xcode 抱怨我的 PreferenceKey 不符合 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() }
}
【问题讨论】: