SwiftUI Text():使用三元条件不本地化



我在有条件地打印本地化文本时遇到问题。例如,这可以正确本地化:

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)")

最新更新