【发布时间】:2017-08-07 12:37:39
【问题描述】:
在 Swift 中,我希望以下代码是完全有效的:
let snailCharacter: Character = "????"
let snailString = snailCharacter as String
但显然,它会产生错误:
无法强制将“字符”类型的值转换为“字符串”类型
解决方案是像这样使用String 初始化器:
let snailString = String(snailCharacter)
我认为Character 是String 的一个子集,这让我很惊讶。为什么禁止将Character 转换为String?
我在 Xcode 9 beta 4 中使用 Swift 4。
【问题讨论】:
-
String是Characters 的集合。你不能投射,因为那是不同的类型。 -
这只是一个设计决定,所以只有设计 Swift
Character的人才能解释原因。在 Swift 标准库中,Character被设计为与String完全不同的东西,String具有用于保存单个 BMP 字符的有效内部表示。因此,Character和String之间的关系与as-casting 提供的任何情况都不匹配: -- 向上转换、桥接、注释文字类型、消除重载函数的歧义。Int8可以被认为是Int16的子集,但不能使用as-casting 将Int8转换为Int16。 -
来到这里解决错误,我认为问题提供了解决方案,答案只是一个奖励:) +1 两者!