如何将任何对象类型转换为字符串?
let single_result = results[i]
var result = ""
result = single_result.valueForKey("Level")
Run Code Online (Sandbox Code Playgroud)
现在我得到错误:无法将任何对象的类型值赋给string类型的值.
如果我投了它:
result = single_result.valueForKey("Level") as! String
Run Code Online (Sandbox Code Playgroud)
我收到错误:无法将'__NSCFNumber'(0x103215cf0)类型的值转换为'NSString'(0x1036a68e0).
我该如何解决这个问题?
Dun*_*n C 29
您不能将任何随机值转换为字符串.as!如果无法将对象强制转换为字符串,则强制转换()将失败.
如果您知道它将始终包含NSNumber,那么您需要添加将NSNumber转换为字符串的代码.这段代码应该有效:
if let result_number = single_result.valueForKey("Level") as? NSNumber
{
let result_string = "\(result_number)"
}
Run Code Online (Sandbox Code Playgroud)
如果为"Level"键返回的对象可以是不同的对象类型,那么您将需要编写更灵活的代码来处理其他可能的类型.
Swift数组和字典通常是打字的,这使得这种东西更清晰.
我会说@ AirSpeedVelocity的回答(欧洲或非洲?)是最好的.使用内置toString功能.听起来它适用于任何Swift类型.
在Swift 3中,答案似乎已经改变.现在,您要使用String初始化程序
init(describing:)
Run Code Online (Sandbox Code Playgroud)
或者,使用问题中的代码:
result = single_result.valueForKey("Level")
let resultString = String(describing: result)
Run Code Online (Sandbox Code Playgroud)
请注意,通常您不需要valueForKey.这是一个只适用于NSObjects的KVO方法.假设single_result是一个Dictionary,您可能需要这种语法:
result = single_result["Level"]
Run Code Online (Sandbox Code Playgroud)
Sco*_*des 10
let s = String(describing: <AnyObject>)
Run Code Online (Sandbox Code Playgroud)
不需要其他任何东西。这适用于各种对象。
该toString函数接受任何类型,并始终生成一个字符串.
如果它是一个实现Printable协议的Swift类型,或者具有重写NSObject的description属性,那么你将获得.description属性返回的任何内容.在这种情况下NSNumber,您将获得该数字的字符串表示.
如果没有,你将获得一个相当无用的类名字符串加上内存地址.但是大多数标准课程,包括NSNumber,都会产生一些合理的东西.
import Foundation
class X: NSObject {
override var description: String {
return "Blah"
}
}
let x: AnyObject = X()
toString(x) // return "Blah"
"\(x)" // does the same thing but IMO is less clear
struct S: Printable {
var description: String {
return "asdf"
}
}
// doesn't matter if it's an Any or AnyObject
let s: Any = S()
toString(s) // reuturns "asdf"
let n = NSNumber(double: 123.45)
toString(n) // returns "123.45"
n.stringValue // also works, but is specific to NSNumber
Run Code Online (Sandbox Code Playgroud)
(ps总是使用toString而不是测试Printable.一方面,String不符合Printable...)
toString()Swift 3 中似乎不再存在了。
看起来有一个失败的初始化程序将返回传入值的description.
init?(_ description: String)
此处的文档https://developer.apple.com/reference/swift/string/1540435-init
| 归档时间: |
|
| 查看次数: |
51053 次 |
| 最近记录: |