我正在嘗試widgetRenderingMode從小部件時間線生成器中確定背景關系資訊和其他背景關系資訊,但我看到此代碼出現一個奇怪的構建錯誤:
func getTimeline(for configuration: AccessoryOptionsIntent, in context: Context, completion: @escaping (Timeline<AccessoryEntry>) -> Void) {
if #available(iOSApplicationExtension 16.0, *) {
if let mode: [WidgetRenderingMode] = context.environmentVariants.widgetRenderingMode {
}
}
Cannot assign to property: 'environmentVariants' is a 'let' constant

如何從時間軸確定渲染模式?
另見:https ://twitter.com/_DavidSmith/status/1578045086507696129
uj5u.com熱心網友回復:
您可能打算讀取當前的渲染模式,它可以像EnvironmentValuesSwiftUI 中的任何其他模式一樣讀取。
@Environment(\.widgetRenderingMode) var widgetRenderingMode
我不確定為什么您的代碼無法編譯。理論上,訪問widgetRenderingMode應該編譯,因為TimelineProviderContext.EnvironmentVariants用@dynamicMemberLookup. 您的訪問權限將轉換為關鍵路徑并傳遞到此下標:
subscript<T>(dynamicMember keyPath: WritableKeyPath<EnvironmentValues, T>) -> [T]? { get }
這是一個只讀下標,不涉及設定environmentVariant。
TimelineProviderContext.EnvironmentVariants確實有另一個對我有用的下標:
subscript<T>(keyPath: WritableKeyPath<EnvironmentValues, T>) -> [T]? { get }
你可以像這樣使用它:
if let mode = context.environmentVariants[\.widgetRenderingMode] {
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/512859.html
標籤:迅速小部件套件
上一篇:在組合接收器中呼叫并發的簡寫?
下一篇:在準備好爭論的檔案上?
