为什么这仍然是可选的?

时间:2017-08-25 20:37:36

标签: swift swift3 optional

我创建一个返回NSNumber的查询。然后我尝试将NSNumber转换为String。由于某种原因,它总是打印/比较作为可选...但是当我检查变量时键入它表示字符串...为什么它是可选的?我需要它成为一个字符串!

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

4 个答案:

答案 0 :(得分:1)

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

这是进行可选链接的正确方法,并确保您不强制使用可选

答案 1 :(得分:0)

whichTurn是一个可选的包装你的NSNumber。你没有把它“转换”成一个字符串,你正在制作一个“描述”它的字符串,在这种情况下,这个描述包括一个事实,其中哪个是可选的......如果你不想要那个'我需要打开它,

let whoseTurnAsString: String = String(describing: whoseTurn!)

(注意结尾!)

答案 2 :(得分: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)
}

答案 3 :(得分:-2)

字符串也可以选择'?'要么 '!'表示可选,检查选项的文档。