extension LocalizedStringKey: ExpressibleByStringLiteral { ... }
extension Text {
// We want `Text("foo")` to use this initializer:
init(_ key: LocalizedStringKey) { ... }
// But without @_disfavoredOverload, it would use this one instead,
// because that lets it give the literal its default type:
@_disfavoredOverload init<S: StringProtocol>(_ str: S) { ... }
}
1条答案
按热度按时间weylhg0b1#
我做了一个小测试,在init上使用与Text相同的签名,如果我传递一个文字,它会转到StringProtocol init。
我猜你做了这样的事情:
你发现第一个重载总是被调用。
这可以通过将
StringProtocol
重载标记为@_disfavoredOverload
来修复。请注意,由于它有一个下划线前缀,因此它不是一个稳定的功能,将来可能会更改。但这确实是SwiftUI中的
Text
所使用的(至少目前是这样)。@_disflavoredOverload
被记录在这个markdown文件中。这里的例子显示了LocalizableStringKey
的这个问题: