gpt4 book ai didi

objective-c - 无法在 Swift 中使用 class_copyPropertyList 获取可选变量

转载 作者:行者123 更新时间:2023-11-28 10:26:03 25 4
gpt4 key购买 nike

我使用以下类 Serializable 将类 Object 转换为 Json。参见 LINK

 var aClass : AnyClass? = self.dynamicType
var propertiesCount : CUnsignedInt = 0
let propertiesInAClass : UnsafePointer<objc_property_t> = class_copyPropertyList(aClass, &propertiesCount)
var propertiesDictionary : NSMutableDictionary = NSMutableDictionary()

for var i = 0; i < Int(propertiesCount); i++ {
var property = propertiesInAClass[i]
var propName = NSString(CString: property_getName(property), encoding: NSUTF8StringEncoding)
var propType = property_getAttributes(property)
var propValue : AnyObject! = self.valueForKey(propName);
/* ... */
}

它工作正常,但是当类包含可选值时,class_copyPropertyList(aClass, &propertiesCount) 看不到它。

考虑以下基本类:

class Person : Serializable{
var age = 1
var name = "no name yet"
var hasMail:Bool?

}

即使我会写:

var person = Person()
person.hasMail = true

我只得到:

age
name

为了让它工作,我需要写 var hasMail:Bool = false


Playground (复制/粘贴)

class User : NSObject{
var age = 1
var name = "no name yet"
var hasMail:Bool?

}

var person = User()
person.hasMail = true

var aClass : AnyClass? = person.dynamicType
var propertiesCount : CUnsignedInt = 0
let propertiesInAClass : UnsafeMutablePointer<objc_property_t> = class_copyPropertyList(aClass, &propertiesCount)

println(propertiesInAClass)

for var i = 0; i < Int(propertiesCount); i++ {
var property = propertiesInAClass[i]
var propName = NSString(CString: property_getName(property), encoding: NSUTF8StringEncoding)
println(propName)
}

如何获取可选名称?

谢谢,

最佳答案

Foundation 提供了从 BoolNSNumber 的桥梁(以及 Int String 等),但它没有为 Bool? 提供桥梁。这就是它对 Objective-C 不可见的原因。如果您尝试使用 @objc 注释 hasMail,它会报错,而它适用于其他属性。

关于objective-c - 无法在 Swift 中使用 class_copyPropertyList 获取可选变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421312/

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