如何将任何对象类型转换为字符串?
let single_result = results[i]
var result = ""
result = single_result.valueForKey("Level")
现在我收到错误:无法将任何对象类型的值分配给字符串类型的值。
如果我投射它:
result = single_result.valueForKey("Level") as! String
我收到错误:
无法将类型“__NSCFNumber”(0x103215cf0) 的值转换为“NSString”(0x1036a68e0)。
我该如何解决这个问题?
您不能将任何随机值转换为字符串。强制施放 (as!
) 如果对象无法转换为字符串,则会失败。
如果您知道它将始终包含 NSNumber,那么您需要添加将 NSNumber 转换为字符串的代码。这段代码应该可以工作:
if let result_number = single_result.valueForKey("Level") as? NSNumber
{
let result_string = "\(result_number)"
}
如果为“Level”键返回的对象可以是不同的对象类型,那么您需要编写更灵活的代码来处理其他可能的类型。
Swift 数组和字典通常是类型化的,这使得这种事情变得更干净。
我想说@AirSpeedVelocity 的答案(欧洲还是非洲?)是最好的。使用内置的toString
功能。听起来它适用于任何 Swift 类型。
EDIT:
在 Swift 3 中,答案似乎发生了变化。现在,您想使用字符串初始值设定项
init(describing:)
或者,使用问题中的代码:
result = single_result.valueForKey("Level")
let resultString = String(describing: result)
请注意,通常您不需要 valueForKey。这是一个仅适用于 NSObject 的 KVO 方法。假设 single_result 是字典,您可能需要以下语法:
result = single_result["Level"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)