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] 取字符了