gpt4 book ai didi

swift - 无法在强制转换中将类型 'Character' 的值转换为类型 'String'

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:46 26 4
gpt4 key购买 nike

在 Swift 中,我希望以下代码是完全有效的代码:

let snailCharacter: Character = "🐌"
let snailString = snailCharacter as String

但显然,它会产生一个错误:

Cannot convert value of type 'Character' to type 'String' in coercion

解决方法是像这样使用 String 初始化器:

let snailString = String(snailCharacter)

我以为 CharacterString 的一个子集,这让我很吃惊。为什么禁止将 Character 转换为 String

我在 Xcode 9 beta 4 中使用 Swift 4。

最佳答案

查看 documentation ,你可以看到, Character 只是 SwiftString 的几种表示之一(强调是我在相关部分添加的)

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可以用View表示,例如CharacterViewutf8View

SwiftString 类型架构背后的关键原则之一是 Unicode 正确性,这是 String 的原因之一不仅仅是 Character 的数组。

有关 Swift4String 更改的更多信息,请参阅 String Manifesto .

更具体地说明为什么转换不起作用。铸件有型铸件和桥铸件两种。类型转换只能在涉及继承的类之间进行。您可以将子类向上转换为其父类(super class),这总是成功的,或者您可以尝试将父类(super class)向下转换为子类,这仅在子类实例首先被向上转换为其父类(super class)时才有效。

从上面的解释中应该很清楚为什么类型转换在 CharacterString 之间不起作用,因为这两种类型都不是相互继承的。

对于桥接转换,这是 Apple 引入的一种方法,用于某些 SwiftFoundation 类型之间的互操作性,例如 String NSString,但由于 StringCharacter 都是 Swift 类型,桥接转换也与此问题无关。

关于swift - 无法在强制转换中将类型 'Character' 的值转换为类型 'String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com