我在有条件地打印本地化文本时遇到问题。例如,这可以正确本地化:
if valueFromDb.isEmpty {
Text("value_is_empty") //localized text
} else {
Text(valueFromDb)
}
如果 valueFromDb 为空,它会以用户的语言打印一些文本,或者如果不是,它会按原样打印 valueFromDb。但是,当我尝试使用三元运算符时,它不起作用:
Text(valueFromDb.isEmpty ? "value_is_empty" : valueFromDb)
当 valueFromDb 为空时,它将打印"value_is_empty"而不是实际的本地化文本。在尝试将其转换为 LocalizedStringKey 时,我收到一个错误(由于 SwiftUI 而在层次结构中更高的随机错误(。
编辑:为了清楚起见,我知道我可以这样做:
valueFromDb.isEmpty ? Text("value_is_empty") : Text(valueFromDb)
但是,我想将三元条件放在 Text(( 括号内,因为我将对多个视图执行此操作,并且每个视图都会有许多修饰符,因此代码将变得非常臃肿。
问题是由于类型推断造成的。您必须将myString
声明为LocalizedStringKey
类型,然后一切都将按预期工作。
当您声明:
@State var mySrtring: LocalizedStringKey = "whatever"
然后:
Text(myString.isEmpty ? "error_text_localized" : myString)
使用此初始值设定项:
public init(_ key: LocalizedStringKey, 表名称:字符串?= 无, 捆绑包:捆绑包?= 无, 评论:静态字符串?= 无(
当你像这样声明它时:
@State var mySrtring: String = "whatever"
然后:
Text(myString.isEmpty ? "error_text_localized" : myString)
使用此初始化器:
公共初始化(逐字内容:字符串(
你必须把你的valueFromDb放在引号里,那么它应该可以正常工作。
Text(valueFromDb.isEmpty ? "value_is_empty" : "(valueFromDb)")