我已将参数传递给AnyObject类型的函数,因为任何东西都可以传递给它。有没有办法动态地传递Object的类型?
答案 0 :(得分:30)
不清楚你的意思"类型"在你的问题。对于Swift中任何类型的任何值,您可以获得其动态运行时类型:
theVariable.dynamicType
你能用它做什么是另一个问题。
带有@jojodmo提示的Swift 3版本
type(of: theVariable)
答案 1 :(得分:12)
通常这是泛型的用途。在代码中AnyObject
没有与ObjC交互的原因很少。如果您根据类型执行不同的操作,那么您实际上可能意味着使用重载。
也就是说,有几种方法可以访问该类型。通常,您希望根据类型运行不同的代码,因此您可以使用switch
:
let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}
或
let x:AnyObject = "asdf"
switch x {
case let xString as String: println("I'm a string: \(xString)")
default: println("I'm not a string")
}
或者您可以使用if:
if let string = x as? String {
println("I'm a string: \(string)")
}
参见"为任意和任何对象输入类型"在Swift编程语言中进行更多讨论。
但是,除非您正在使用ObjC代码,否则很少有理由使用Any
或AnyObject
。泛型和重载是旨在解决Swift中这些问题的工具。
答案 2 :(得分:0)
首先导入基金会
如果你不想测试类型那样做:
var test1 = "test"
println(_stdlib_getTypeName(test1))
你会得到“TtSS”TtSS意味着字符串。
如果您尝试使用Int,那么它将是TtSi(i for int)
答案 3 :(得分:0)
func testType(value:AnyObject!){
if let v = value as? NSString{
println("NSString")
}else if let v = value as? NSNumber{
println("NSNumber")
}else if let v = value as? Double{
println("Double")
}else if let v = value as? Int{
println("Int")
}
}