首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中动态获取AnyObject的类型

在Swift中动态获取AnyObject的类型
EN

Stack Overflow用户
提问于 2014-08-27 12:11:59
回答 4查看 12.8K关注 0票数 15

我向AnyObject类型的函数传递了一个参数,因为任何东西都可以传递给它。有办法动态地传递对象类型吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-27 13:46:09

通常情况下,这就是泛型的用途。很少有充分的理由在代码中使用不与AnyObject交互的ObjC。如果然后根据类型执行不同的操作,那么您可能实际上是要使用重载。

尽管如此,有几种方法可以访问该类型。通常,您希望根据类型运行不同的代码,因此可以使用switch

代码语言:javascript
运行
复制
let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
if let string = x as? String {
  println("I'm a string: \(string)")
}

有关更多讨论,请参见Swift编程语言中的“Any和AnyObject类型转换”。

但是,除非您正在使用ObjC代码,否则很少有理由使用AnyAnyObject。泛型和重载是用来解决Swift中这些问题的工具。

票数 13
EN

Stack Overflow用户

发布于 2014-08-27 19:35:27

在你的问题中你所说的“类型”是什么意思还不清楚。对于Swift中任何类型的任何值,都可以获得如下所示的动态运行时类型:

代码语言:javascript
运行
复制
theVariable.dynamicType

你能用它做什么是另一个问题。

Swift 3版本有@jojodmo的提示:

代码语言:javascript
运行
复制
type(of: theVariable)
票数 31
EN

Stack Overflow用户

发布于 2014-08-27 13:25:00

第一进口基金会

如果你不喜欢这种类型的test1,你可以这样做:

代码语言:javascript
运行
复制
var test1 = "test"

println(_stdlib_getTypeName(test1))

您将得到" TtSS“TtSS的意思是字符串。

如果您尝试使用Int,它将是TtSi (i表示int)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25526894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档