swift (runtime)自定义类转化成字典,Data,JSON字符串

来源:互联网 发布:寒战2 知乎 编辑:程序博客网 时间:2024/06/11 14:45

swift (runtime)自定义类转化成字典,Data,JSON字符串

实现部分class ObjectPrint: NSObject {    class func getJSON(obj:AnyObject,options:JSONSerialization.WritingOptions)->Data{        var data = Data()        do{            data = try JSONSerialization.data(withJSONObject: self.getObjectDictionary(obj: obj), options: options)        }        catch{        }        return data    }    class func getObjectDictionary(obj:AnyObject)->NSMutableDictionary{        let dic = NSMutableDictionary()        var propsCount:UInt32 = 0        let props = class_copyPropertyList(obj.classForCoder, &propsCount)        for i in 0..<propsCount {            let prop = props?[Int(i)]            let propName = String.init(utf8String: property_getName(prop))            var value = obj.value(forKey: propName!)            if value == nil {                value = NSNull()            }else{                value = self.getObjectInternal(obj: value as AnyObject)            }            dic.setValue(value, forKey: propName!)        }        return dic    }    class func getObjectInternal(obj:AnyObject)->AnyObject{        if obj.isKind(of: NSString.self) || obj.isKind(of: NSNumber.self) || obj.isKind(of: NSNull.self){            return obj        }        if obj.isKind(of: NSArray.self) {            let arr = NSArray.init(array: obj as! [Any])            let objArr = NSMutableArray.init(capacity: arr.count)            for i in 0..<arr.count {                objArr[i] = self.getObjectInternal(obj: arr[i] as AnyObject)            }            return objArr        }        if obj.isKind(of: NSDictionary.self) {            let dic = NSMutableDictionary.init(capacity: (obj as! NSDictionary).count)            for key in (obj as! NSDictionary).allKeys {                dic.setObject(self.getObjectInternal(obj: (obj as! NSDictionary).value(forKey: key as! String) as AnyObject), forKey: key as! NSString)            }            return dic        }        return self.getObjectDictionary(obj:obj)    }}自定义类class Person: NSObject {    var name:String?    var age:NSNumber?    var children:NSArray?    var book:NSDictionary?}class Child: NSObject {    var name:NSString?    var age:NSNumber?}调用let person = Person()        person.name = "张三"        person.age = 40        person.book = ["first":"we","second":"are"]        let childOne = Child()        childOne.name = "ddf"        childOne.age = 2        let childTwo = Child()        childTwo.name = "dfgd"        childTwo.age = 4        person.children = NSArray(arrayLiteral: childOne,childTwo)        //自定义类转化成Data或json字符串        let jsonData = ObjectPrint.getJSON(obj: person, options: JSONSerialization.WritingOptions.prettyPrinted)        let jsonText = NSString.init(data: jsonData, encoding: String.Encoding.utf8.rawValue)        print(jsonText!)        //自定义类转化成字典        let dic = ObjectPrint.getObjectDictionary(obj: person)        print(dic)
阅读全文
0 0
原创粉丝点击