Looking at the documentation, you can see, that Character is just one of the several representations of String in Swift (emphasis added to the relevant parts by me)
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.
In Swift, String is not just an array of Characters unlike in some other languages. In Swift, Character is just a way to represent a String instance in a certain way. Strings can be represented using Views, such as CharacterView, utf8View, etc.
One of the key principles behind the architecture of Swift's String type was Unicode correctness, which is one of the reasons Strings are not just simply an array of Characters.
For more information about the changes to String in Swift4, see the String Manifesto.
To be more specific about why casting doesn't work. There are two kinds of castings, type casting and bridge-casting. Type casting is only possible between classes, where inheritance is involved. You can either upcast a subclass to its superclass, which always succeeds or you can try to downcast a superclass to a subclass, which only works if a subclass instance was first upcasted to its superclass.
It should be quite clear from the above explanation why type casting doesn't work between Character and String, since the neither of the two types inherit from each other.
For bridge casting, this is a method Apple introduced for interoperability between some Swift and Foundation types, such as String and NSString, but since both String and Character are Swift types, bridge casting has nothing to do with this problem either.
Stringis a collection ofCharacters. You cannot cast because that are different types. - Martin RCharactercan explain why. In Swift Standard Library,Characteris designed as a completely different thing thanString, which has an efficient internal representation for holding a single BMP-character. So, the relationship betweenCharacterandStringdoes not match any of the cases whereas-casting provided: -- upcasting, bridging, annotating literal types, disambiguating overloaded functions.Int8can be considered to be sort of a subset ofInt16, but you cannot useas-casting to convertInt8toInt16. - OOPer