我向AnyObject类型的函数传递了一个参数,因为任何东西都可以传递给它。有办法动态地传递对象类型吗?
发布于 2014-08-27 13:46:09
通常情况下,这就是泛型的用途。很少有充分的理由在代码中使用不与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编程语言中的“Any和AnyObject类型转换”。
但是,除非您正在使用ObjC代码,否则很少有理由使用Any或AnyObject。泛型和重载是用来解决Swift中这些问题的工具。
发布于 2014-08-27 19:35:27
在你的问题中你所说的“类型”是什么意思还不清楚。对于Swift中任何类型的任何值,都可以获得如下所示的动态运行时类型:
theVariable.dynamicType你能用它做什么是另一个问题。
Swift 3版本有@jojodmo的提示:
type(of: theVariable)发布于 2014-08-27 13:25:00
第一进口基金会
如果你不喜欢这种类型的test1,你可以这样做:
var test1 = "test"
println(_stdlib_getTypeName(test1))您将得到" TtSS“TtSS的意思是字符串。
如果您尝试使用Int,它将是TtSi (i表示int)。
https://stackoverflow.com/questions/25526894
复制相似问题