🅿️PreferenceKey
範例
// 📦 MaxValue<T: FloatingPoint>
public struct MaxValue<T: FloatingPoint>: PreferenceKey {
// value type
public typealias Value = T?
// default value (nil == not set)
public static var defaultValue: Value { nil }
// ⭐️ choose max value
public static func reduce(value: inout Value, nextValue: () -> Value) {
// ⭐️ [T?] --(compactMap)--> [T] --(max)--> T?
value = [value, nextValue()].compactMap{ $0 }.max()
}
}
用法
設 K 為遵循 PreferenceKey 的真實型別 (concrete type),則使用這個 PreferenceKey 時,通常必須具備以下「三大要素」:
有了這些要素後,還要依照固定的模式,才能順利完成佈局,主要是以下的「三步驟」:
整個流程可以簡化為:
👉 比較:Anchor Preferences
⭐️ 取名原則
PreferenceKey 的名字最好是跟母視件的 @State 變數一致,例如: 如果我們要找的是某個子視件兩邊長中的最大邊,這時可以:
將母視件的 @State 變數取名為:
maxSide
而 PreferenceKey 就取名為:
MaxSide
👉 參見:
💈 CircleText
👉 自製型別:📦 PreferenceKeys
Last updated
Was this helpful?