Swift4 Json

swift4 带来了原生的json解析,它们分别是 JSONDecoder和JSONEncoder,使用起来还算方便,不过为了更方便,我把它们又进行了简单的封装:

class JsonHelper {
    static func ToJson<T:Codable>(_ obj:T) -> String {
        let encoder=JSONEncoder();
        let data=try! encoder.encode(obj)
        let str=String(data:data,encoding:.utf8)!
        return str
    }
    static func ToObject<T:Codable>(_ data:String) -> T{
        let decoder=JSONDecoder();
        let obj=try! decoder.decode(T.self, from: data.data(using: .utf8)!)
        return obj;
    }
}

我把它们封装成了泛型方法,这样用起来就相当方便了,提示下,要实现json序列化和反序列化,你必须在你的实体类继承Codable,如下:

class Boy:Codable {
    init() {
        self.Name="XiaoMing"
        self.Age=10
        self.Sex=true
    }
    init(name:String,age:Int,sex:Bool) {
        self.Name=name
        self.Age=age
        self.Sex=sex
    }
    func ToString() -> String {
        return JsonHelper.ToJson(self)
    }
    
    var Name:String!
    var Age:Int!
    var Sex:Bool!
}

 

调用也很简单:

var boy=Boy()
var str=JsonHelper.ToJson(boy)
var b:Boy=JsonHelper.ToObject(str)
var name=(JsonHelper.ToObject(str) as Boy).Name

 顺便吐槽下swift的泛型居然不能用JsonHelper.ToObject<Boy>(str) 这样的方式!

 

再加一个String类型的下标取字符

extension String {
    subscript(index:Int) -> Character{
    get{
    return self[self.index(self.startIndex,offsetBy:index)]
    }
  }
}

写了这个扩展你就可以 str[index] 取字符了

 

 

posted @ 2017-08-04 11:57 Yixin-Ran 阅读(...) 评论(...) 编辑 收藏