SwiftUI:无法推断参考成员的上下文基础

我为 SwiftUI Font 编写了一个扩展,它引入了一些自定义字体。

extension Font {
    static let solDisplay: Font = .custom("Gilroy", size: 36)
    static let solHeadline: Font = .custom("Gilroy", size: 24)
}

现在由于某种原因,在构建过程中出现了以下错误:Cannot infer contextual base in reference to member 'heavy'. 有趣的是,这个错误是其他人在执行 Pull Request 时发现的——我在本地没有注意到这些错误,但似乎只有一些人会发生这种错误。目前,我们团队中四分之二的人有其他人没有的错误。

struct AssetsDemoPage: View {
    let fonts: [(String, Font)] = [
        ("Display - Heavy", .solDisplay.weight(.heavy)),   // Error Happening here
        ("Display - Light", .solDisplay),                  // No error here!
        ("Headline - Heavy", .solHeadline.weight(.heavy)), // Error Happening here
        ("Headline - Light", .solHeadline),                // No error here!
    ]

    var body: some View {
        NavigationView {
            List {
                Section(header: Text("Fonts")) {
                    ForEach(fonts, id: .0) { name, font in
                        Text(name)
                            .font(font)
                    }
                }
            }
            .navigationBarTitle(Text("Assets"), displayMode: .inline)
        }
    }
}

回答

正如@jnpdx 所指的 Xcode 版本一样,Swift 版本可能不一样。在 Swift 5.4 中,实现了SE-0287。

该提议允许隐式成员链。您可以阅读有关链接的提案的更多信息,但这总结得很好:

该提议建议将隐式成员语法扩展为更复杂的表达式,而不仅仅是单个静态成员或函数。具体来说,将允许隐式成员语法覆盖成员引用链。

诸如此类的代码Color.red.opacity(0.5)现在可以简化为.red.opacity(0.5),类似于您的示例。

使用 Swift 5.4 需要 Xcode 12.5,所以让团队知道升级。


以上是SwiftUI:无法推断参考成员的上下文基础的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>