望着documentation,你可以看到,Character
只是在Swift
的String
的几次交涉中的一个(加着重号的相关部分我)
A string is a series of characters, such as "hello, world" or "albatross". Swift strings are represented by the String type. The contents of a String can be accessed in various ways, including as a collection of Character values.
在Swift
,String
不仅是一个不同于其他一些语言的Character
列数组。在Swift
中,Character
只是以某种方式表示String
实例的一种方式。 String
S可使用View
S,如CharacterView
,utf8View
等
一个Swift
的String
类型的体系结构背后的关键原理是Unicode的正确性,这是原因之一String
s为不仅表示只是一排Character
s。
有关String
在Swift4
中更改的更多信息,请参阅String Manifesto。
更具体地说明为什么铸件不起作用。有两种类型的铸件,类型铸造和桥式铸造。类型转换只能在涉及继承的类之间进行。你可以将一个子类上传到它的超类,它总是成功的,或者你可以尝试将超类下传到一个子类,这只有在子类实例首次被上传到它的超类时才有效。
从上面的解释中应该很清楚,为什么类型转换在Character
和String
之间不起作用,因为两种类型都不相互继承。
桥梁浇注,这是一种方法,苹果公司推出了一些Swift
和Foundation
类型,如String
和NSString
之间的互操作性,但由于双方String
和Character
是Swift
类型,桥铸造无关这个问题无论是。
“String”是“Character”的集合。你不能投射,因为那是不同的类型。 –
这只是一个设计决定,所以只有设计Swift的人才能解释原因。在Swift标准库中,“字符”被设计成与“字符串”完全不同的东西,它具有用于保存单个BMP字符的高效内部表示。因此,'Character'和'String'之间的关系不符合'as-casting'提供的任何情况: - 上传,桥接,注释文字类型,消除重载函数的歧义。 'Int8'可以被认为是'Int16'的一个子集,但是不能用'as'-casting来将'Int8'转换为'Int16'。 – OOPer