gpt4 book ai didi

ios - 迭代 Objective-C 对象的子对象时,镜像在 Swift 中不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 22:13:18 24 4
gpt4 key购买 nike

我有一个与在 Swift 中使用 Mirror 相关的非常奇怪的问题。我正在迭代名为 Test 的类中的所有属性:

let test = Test()
let mirror = Mirror(reflecting: test)
for i in mirror.children {
...
}

如果我在 Swift 中实现我的 Test 类,我在 children 中有三个值被迭代:

class Test: NSObject {
var device: NSNumber!
var version: NSNumber!
var application: NSString!
}

但是,如果我在 Objective C 中实现 Test 类,我会得到零个 child :

@interface ObjectCTest : NSObject

@property (nonatomic, strong) NSNumber *device;
@property (nonatomic, strong) NSNumber *version;
@property (nonatomic, strong) NSString *application;

@end

有人知道会发生什么吗?我开始认为这可能与 Xcode 项目设置有关,因为我还有其他适用的项目。任何建议表示赞赏!

最佳答案

Mirror 似乎不适用于 Objective-C 类。但是,您可以使用 class_copyPropertyList 函数从 Objective-C 类中检索所有属性。

var outCount : UInt32 = 0
let properties = class_copyPropertyList(ObjectCTest.self, &outCount)

print(outCount)

for i : UInt32 in 0..<outCount
{
let strKey : NSString? = NSString(CString: property_getName(properties[Int(i)]), encoding: NSUTF8StringEncoding)

let attrs : NSString? = NSString(CString: property_getAttributes(properties[Int(i)]), encoding: NSUTF8StringEncoding)

print(strKey)
print(attrs)
}

关于ios - 迭代 Objective-C 对象的子对象时,镜像在 Swift 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com