【发布时间】:2014-08-21 08:11:00
【问题描述】:
我使用以下类 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
对于游乐场(复制/粘贴)
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)
}
如何获取可选名称?
谢谢,
【问题讨论】:
-
即使没有答案:读取类的属性列表进行“自动”序列化是个坏主意。我编写了大量包含计算属性的类,这些属性不应该被序列化到任何地方。
-
@AminNegm-Awad 在 Java 世界中,您有插件
Gson可以将任何类转换为 Json,无论类多么复杂。所以停止尝试自动序列化的建议是没有意义的。还是谢谢 -
这个建议是没有意义的,因为java中有插件?有趣的笑话……
标签: objective-c swift