2017-08-25 136 views
-4

我做了一個查詢,返回一個NSNumber。然後我試圖將NSNumber投到String。出於某種原因,它總是打印/比較作爲可選...但是當我檢查變量類型它說的字符串...爲什麼它是可選的?我需要它是一個字符串!爲什麼這仍然是可選的?

let whoseTurn = selectedGame?["currentSender"] 
let whoseTurnAsString: String = String(describing: whoseTurn) 
+0

因爲變量'以正確的方式whoseTurn '是一個可選類型。 –

+0

@OrkhanAlikhanov但不會將第二行轉換爲字符串? – user7804097

+0

不,它根本不投射,它會創建一個描述變量的字符串。 – luk2302

回答

0

whichTurn是一個可選的包裝你的NSNumber。你不是在這裏把它「鑄造」成一個字符串,而是在製作一個「描述」它的字符串,在這種情況下,這個描述包含了一個事實,即其轉換是可選的......如果你不希望你「會需要解開它,

(注意!在結束)

+0

明白了......我看到這裏發生了什麼。謝謝! – user7804097

-2

字符串可以是可選的'?'要麼 '!'表示可選,檢查可選項的文件。

+1

這不回答問題,類型是'String'。 – luk2302

+0

因爲這是正確的,你創建了「可選字符串」 – KirillC

+0

這裏沒有可選字符串 – luk2302

0

這行代碼let whoseTurn = selectedGame?["currentSender"]將返回一個可選的。

的代碼let whoseTurnAsString: String = String(describing: whoseTurn)這條線將返回一個String描述該可選值,這將是一個字符串這樣的:可選(5)可選(6)。它描述的價值是說它是可選的。

所以,你需要打開那可選,以獲得包裝的價值,您可以強制展開selectedGame這樣的: let whoseTurn = selectedGame!["currentSender"],然後使用普通的字符串初始化像這樣:String(whoseTurn)

或者,最好,安全地拆開包裝它像這樣:

if let whoseTurn = selectedGame?["currentSender"] { 
    let whoseTurnAsString = String(whoseTurn) 
} 
1
if let whoseTurn = selectedGame?["currentSender"] as? NSNumber { 
    let whoseTurnAsString = "\(whoseTurn)" 
    print(whoseTurnAsString) 
} 

這是做可選的鏈接,並確保你不會強迫可選

相關問題