2017-08-25 107 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) 
} 

这是做可选的链接,并确保你不会强迫可选

相关问题