我做了一個查詢,返回一個NSNumber。然後我試圖將NSNumber
投到String
。出於某種原因,它總是打印/比較作爲可選...但是當我檢查變量類型它說的字符串...爲什麼它是可選的?我需要它是一個字符串!爲什麼這仍然是可選的?
let whoseTurn = selectedGame?["currentSender"]
let whoseTurnAsString: String = String(describing: whoseTurn)
我做了一個查詢,返回一個NSNumber。然後我試圖將NSNumber
投到String
。出於某種原因,它總是打印/比較作爲可選...但是當我檢查變量類型它說的字符串...爲什麼它是可選的?我需要它是一個字符串!爲什麼這仍然是可選的?
let whoseTurn = selectedGame?["currentSender"]
let whoseTurnAsString: String = String(describing: whoseTurn)
whichTurn是一個可選的包裝你的NSNumber。你不是在這裏把它「鑄造」成一個字符串,而是在製作一個「描述」它的字符串,在這種情況下,這個描述包含了一個事實,即其轉換是可選的......如果你不希望你「會需要解開它,
(注意!在結束)
明白了......我看到這裏發生了什麼。謝謝! – user7804097
這行代碼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)
}
if let whoseTurn = selectedGame?["currentSender"] as? NSNumber {
let whoseTurnAsString = "\(whoseTurn)"
print(whoseTurnAsString)
}
這是做可選的鏈接,並確保你不會強迫可選
因爲變量'以正確的方式whoseTurn '是一個可選類型。 –
@OrkhanAlikhanov但不會將第二行轉換爲字符串? – user7804097
不,它根本不投射,它會創建一個描述變量的字符串。 – luk2302