【发布时间】:2021-04-27 21:39:04
【问题描述】:
我使用包装多语言字符串的结构体,很容易不小心打印出结构体类型名称而不是字符串,像这样:
struct MultilangStringStruct {
let en: String
let de: String
init(en: String, de: String) {
self.en = en
self.de = de
}
}
let s = MultilangStringStruct(en: "Of course", de: "Jawohl")
/// Oops, we forgot to use s.en, and it prints this, with no compiler warning:
/// Commander said "MultilangString(en: "Of course", de: "Jawohl")"!
print("The commander said \"\(s)\"!")
我可以修改结构以防止这种隐式转换为字符串吗?我希望 swift 编译器产生我能注意到的错误或警告,并将 s 修复为 s.en。
【问题讨论】:
-
您可以自定义字符串插值本身。 (但不适用于
print命令。) -
你可以在运行时采用 CustomStringConvertible 和 barf,但你不能在编译时做任何事情,不。
-
我认为使用
print并不是真正的目的,所以如果可能的话,我会尝试通过编写单元测试来解决这个问题。
标签: swift