SwiftUI:无法推断引用成员的上下文基础

问题描述 投票:0回答:2

我为 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'
。 有趣的是,这个错误是其他人在执行拉取请求时发现的 - 我在本地没有注意到任何这些错误,但它似乎只发生在某些错误上。目前我们团队中四分之二的人有其他人没有的错误。

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)
        }
    }
}
swift swiftui swift5
2个回答
14
投票

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

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

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

诸如

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

使用 Swift 5.4 需要 Xcode 12.5,因此请告知团队进行升级。


0
投票

我最终做的是这样的。我想要一个绿点,如果程序遇到任何错误,它就会变成红色。

我声明了我的变量

@State public var errorDot = Color.green

然后在我放入的每个 catch 函数中

errorDot = Color.red

这就是我创建的用来改变颜色的“点”:

Circle()
        .fill(errorDot)
        .padding(.trailing, -5.0)
        .frame(width: 10.0, height: 10.0)
//Debug light
© www.soinside.com 2019 - 2024. All rights reserved.