这是一个简单的问题,但我不明白。
我在 SwiftUI 中有一个带有标签的自定义按钮:Text():该按钮的定义如下:
public struct KlikButtonOutline: View {
let title: LocalizedStringKey
let disabled: Bool
let action: () -> Void
public var body: some View {
Button() {
action()
} label: {
Text(title)
}
}
}
这工作正常并显示一个带有“退出”文本的按钮。
KlikButtonOutline("Sign out") {...}
我想将我的文本提取到一个单独的文件中,这样做:
struct ProfileViewLabels {
static let SignInButtonText = "Sign in"
static let SignOutButtonText: String = "Sign out"
}
它的使用方式如下:
KlikButtonOutline(ProfileViewLabels.SignOutText) {...}
这会导致错误:
Cannot convert value of type 'String' to expected argument type 'LocalizedStringKey'
我确实意识到输入被声明为可本地化的字符串,但为什么是"Some text"
可本地化的字符串而static let text = "Some text"
不是呢?
的初始化程序
KlikButtonOutline
采用LocalizedStringKey
,但是ProfileViewLabels.SignOutText
是String
。如果你传入一个字符串文字,比如
"Some Text"
,则该字符串文字可以转换为LocalizedStringKey
,因为LocalizedStringKey
符合ExpressibleByStringLiteral
。只有字符串文字才能通过这种方式转换。如果要将字符串常量本地化,请将其类型更改为
LocalizedStringKey
,而不是String
。如果您希望按钮也接受逐字文本(未本地化的)作为标题。请参阅此帖子。
相关文章