swift Xcode 15中的GeneratedAssetSymbols错误“Ambiguous use of ...”

wxclj1h5  于 2023-09-29  发布在  Swift
关注(0)|答案(1)|浏览(933)

我打开了Xcode 15的新功能,现在我的构建失败了。GeneratedAssetSymbols大约有13k行,其中大约有1k行失败。
故障都在SwiftUI.Color扩展中。像这样的一行:

static var gr150: SwiftUI.Color { .init(.gr150) }

Found this candidate指向:

/// The "gr150" asset catalog color.
static var gr150: AppKit.NSColor {
    #if !targetEnvironment(macCatalyst)
        .init(resource: .gr150)
    #else
        .init()
    #endif
}

/// The "gr150" asset catalog color resource.
static let gr150 = ColorResource(name: "gr150", bundle: resourceBundle)

有办法解决吗或者关闭GeneratedAssetSymbols?
这适用于macOS SwiftUI目标应用。

xxe27gdn

xxe27gdn1#

我能想到的唯一原因是您在某个地方添加了自己的Color.init,这需要一个NSColor,可能是因为您不想一直编写nsColor:参数标签。例如

extension Color {
    init(_ color: NSColor) { self.init(nsColor: color) }
}

这将导致Color(.gr150)是二义性的。它可以调用Color.init(ColorResource),也可以调用您自己的Color.init(NSColor)
否则,我不知道为什么它是模棱两可的。您可以通过设置“Generate Swift Asset Symbol Extensions”设置来关闭生成。

这仍然会生成GeneratedAssetSymbols.swift,但只会生成ColorResourceImageResource,因此在使用颜色时仍然可以避免字符串文字。你只需要做:

Color(.gr150)
// or
NSColor(resource: .gr150)

由于NSColor.gr150已经消失,第一个不再是模糊的。
如果你只需要SwiftUI Color扩展,你仍然可以打开“生成Swift资产符号扩展”,只把“SwiftUI”放在“生成Swift资产符号框架支持”中。

这样,您仍然会得到Color.gr150,并且由于NSColor.gr150已经消失,因此生成的.init(.gr150)将不再是二义性的。

相关问题