簡體   English   中英

在強制中無法將“Character”類型的值轉換為“String”類型

[英]Cannot convert value of type 'Character' to type 'String' in coercion

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

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

但顯然,它會產生錯誤:

在強制中無法將“Character”類型的值轉換為“String”類型

解決方法是使用String初始化器,如下所示:

let snailString = String(snailCharacter)

我認為CharacterString的一個子集,所以這讓我感到驚訝。 為什么禁止將CharacterString

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

查看文檔 ,您可以看到, Character只是SwiftString的幾個表示形式之一(重點是由我添加到相關部分)

字符串是一系列字符,例如“hello,world”或“albatross”。 Swift字符串由String類型表示。 可以通過各種方式訪問String的內容,包括作為Character值的集合。

SwiftString不僅僅是一個Character的數組,與其他語言不同。 SwiftCharacter只是一種以某種方式表示String實例的方法。 String s可以使用View來表示,例如CharacterViewutf8View等。

SwiftString類型體系結構背后的關鍵原則之一是Unicode正確性,這是String s不僅僅是Character數組的原因之一。

有關Swift4 String更改的更多信息,請參閱String Manifesto

更具體地說明為什么鑄造不起作用。 有兩種鑄件,鑄造和鑄造。 類型轉換只能在涉及繼承的類之間進行。 您可以將子類向上轉換為其超類(它總是成功),或者您可以嘗試將超類向下轉換為子類,這僅在子類實例首次上傳到其超類時才有效。

從上面的解釋中可以清楚地看出為什么類型轉換在CharacterString之間不起作用,因為這兩種類型都不相互繼承。

對於橋接轉換,這是Apple為某些SwiftFoundation類型(如StringNSString之間的互操作性而引入的方法,但由於StringCharacter都是Swift類型,因此橋接轉換也與此問題無關。

首先,你需要一個文本表示。 你可以轉換為String只有一個描述的Character是這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM