我创建一个返回NSNumber的查询。然后我尝试将NSNumber
转换为String
。由于某种原因,它总是打印/比较作为可选...但是当我检查变量时键入它表示字符串...为什么它是可选的?我需要它成为一个字符串!
let whoseTurn = selectedGame?["currentSender"]
let whoseTurnAsString: String = String(describing: whoseTurn)
答案 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)
字符串也可以选择'?'要么 '!'表示可选,检查选项的文档。