首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift支持反射吗?

Swift支持反射吗?
EN

Stack Overflow用户
提问于 2014-06-05 20:48:16
回答 3查看 34.9K关注 0票数 116

Swift支持反射吗?例如,Swift对象有没有像valueForKeyPath:setValue:forKeyPath:这样的东西?

实际上它有没有像Objective-C中的obj.class这样的动态类型系统呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-06 04:40:44

看起来这是一些反射支持的开始:

代码语言:javascript
复制
class Fruit {
    var name="Apple"
}

reflect(Fruit()).count         // 1
reflect(Fruit())[0].0          // "name"
reflect(Fruit())[0].1.summary  // "Apple"

出自mchambers gist,这里:https://gist.github.com/mchambers/fb9da554898dae3e54f2

票数 85
EN

Stack Overflow用户

发布于 2014-08-17 09:11:43

目前看来,Swift反射API对Apple来说不是一个高优先级的东西。但是,除了@stevex answer之外,标准库中还有另一个函数可以提供帮助。

从beta 6开始,_stdlib_getTypeName获取变量的损坏类型名称。将此内容粘贴到空操场中:

代码语言:javascript
复制
import Foundation

class PureSwiftClass {
}

var myvar0 = NSString() // Objective-C class
var myvar1 = PureSwiftClass()
var myvar2 = 42
var myvar3 = "Hans"

println( "TypeName0 = \(_stdlib_getTypeName(myvar0))")
println( "TypeName1 = \(_stdlib_getTypeName(myvar1))")
println( "TypeName2 = \(_stdlib_getTypeName(myvar2))")
println( "TypeName3 = \(_stdlib_getTypeName(myvar3))")

输出为:

代码语言:javascript
复制
TypeName0 = NSString
TypeName1 = _TtC13__lldb_expr_014PureSwiftClass
TypeName2 = _TtSi
TypeName3 = _TtSS

Ewan Swick's blog entry帮助破译这些字符串:

例如,_TtSi代表Swift的内部Int类型。

Mike Ash has a great blog entry covering the same topic

票数 5
EN

Stack Overflow用户

发布于 2020-02-27 10:19:22

Swift 5中没有reflect关键字,现在您可以使用

代码语言:javascript
复制
struct Person {
    var name="name"
    var age = 15
}

var me = Person()
var mirror = Mirror(reflecting: me)

for case let (label?, value) in mirror.children {
    print (label, value)
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24060667

复制
相关文章

相似问题

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