如何正确实现LocalizedStringKey的字符串插值(String Catalog场景)
解决LocalizedStringKey字符串插值显示异常的问题
问题原因
直接将LocalizedStringKey类型的值放入字符串插值("\(...)")中时,Swift会调用该类型的默认description方法,输出结构体的调试信息(如LocalizedStringKey(key: ...)),而非对应的本地化字符串。
正确实现方式
方式一:返回本地化后的String类型
修改localizedString()方法,直接返回已完成本地化的String,插值时会直接显示正确内容:
enum A { case a1 case a2 func localizedString() -> String { switch self { case .a1: return String(localized: "aa") case .a2: return String(localized: "bb") } } }
使用时直接插值:
"\(a.localizedString()) · \(b.localizedString())"
方式二:在SwiftUI中使用Text组件拼接(推荐)
如果是SwiftUI视图场景,无需手动拼接字符串,直接用Text组件的拼接功能,每个Text会自动处理LocalizedStringKey的本地化:
Text(a.localizedString()) + Text(" · ") + Text(b.localizedString())
注意:需确保" · "已在String Catalog中配置对应本地化条目,或直接使用已本地化的分隔符。
方式三:显式转换LocalizedStringKey为String
若必须保留localizedString()返回LocalizedStringKey的设计,可在插值时显式调用String(localized:)转换:
"\(String(localized: a.localizedString())) · \(String(localized: b.localizedString()))"
内容的提问来源于stack exchange,提问作者user1385809
相关产品推荐
相关产品推荐

