我做了一个查询,返回一个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