在 Swift 中,我希望以下是一个完全有效的代码:
let snailCharacter: Character = ""
let snailString = snailCharacter as String
Run Code Online (Sandbox Code Playgroud)
但显然,它产生了一个错误:
无法在强制转换中将“字符”类型的值转换为“字符串”类型
解决方案是使用这样的String初始化程序:
let snailString = String(snailCharacter)
Run Code Online (Sandbox Code Playgroud)
我认为Character是 的一个子集String,这让我感到惊讶。为什么禁止投射Character到String?
我在 Xcode 9 beta 4 中使用 Swift 4。
查看文档,您可以看到,这只是inCharacter的几种表示之一(重点是我添加到相关部分的)StringSwift
字符串是一系列字符,例如“hello, world”或“albatross”。Swift 字符串由 String 类型表示。可以通过多种方式访问字符串的内容,包括作为字符值的集合。
与其他一些语言不同,在 中Swift,String不仅仅是 s 的数组。CharacterIn Swift,Character只是以String某种方式表示实例的一种方式。Strings可以用Views来表示,如CharacterView、utf8View等。
Swifts类型架构背后的关键原则之一是 Unicode 正确性,这也是s 不仅仅是简单的数组的String原因之一。StringCharacter
String有关in更改的更多信息Swift4,请参阅String Manifesto。
更具体地说明为什么铸造不起作用。铸件有型式铸造和桥式铸造两种。类型转换只能在涉及继承的类之间进行。您可以将子类向上转换为其超类,这总是成功的,也可以尝试将超类向下转换为子类,这仅在子类实例首先向上转换为其超类时才有效。
Character从上面的解释应该很清楚为什么类型转换在和 之间不起作用String,因为这两种类型都不会互相继承。
Swift对于桥接转换,这是 Apple 为某些和类型之间的互操作性而引入的方法Foundation,例如String和NSString,但由于 和String都是Character类型Swift,因此桥接转换也与此问题无关。
| 归档时间: |
|
| 查看次数: |
7457 次 |
| 最近记录: |