在 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
的几种表示之一(重点是我添加到相关部分的)String
Swift
字符串是一系列字符,例如“hello, world”或“albatross”。Swift 字符串由 String 类型表示。可以通过多种方式访问字符串的内容,包括作为字符值的集合。
与其他一些语言不同,在 中Swift
,String
不仅仅是 s 的数组。Character
In Swift
,Character
只是以String
某种方式表示实例的一种方式。String
s可以用View
s来表示,如CharacterView
、utf8View
等。
Swift
s类型架构背后的关键原则之一是 Unicode 正确性,这也是s 不仅仅是简单的数组的String
原因之一。String
Character
String
有关in更改的更多信息Swift4
,请参阅String Manifesto。
更具体地说明为什么铸造不起作用。铸件有型式铸造和桥式铸造两种。类型转换只能在涉及继承的类之间进行。您可以将子类向上转换为其超类,这总是成功的,也可以尝试将超类向下转换为子类,这仅在子类实例首先向上转换为其超类时才有效。
Character
从上面的解释应该很清楚为什么类型转换在和 之间不起作用String
,因为这两种类型都不会互相继承。
Swift
对于桥接转换,这是 Apple 为某些和类型之间的互操作性而引入的方法Foundation
,例如String
和NSString
,但由于 和String
都是Character
类型Swift
,因此桥接转换也与此问题无关。
归档时间: |
|
查看次数: |
7457 次 |
最近记录: |