2015-10-22 29 views
1

這是我的課:雨燕2.0 Array對象到JSON字符串

public class Coordinate: NSObject{ 
public var lat: Double 
public var lon: Double 

init(latitude: Double, longitude: Double) { 
    self.lat = latitude 
    self.lon = longitude 
} 

init(coder aDecoder: NSCoder!) { 
    self.lat = aDecoder.decodeObjectForKey("latitude") as! Double 
    self.lon = aDecoder.decodeObjectForKey("longitude") as! Double 
} 

func encodeWithCoder(aCoder: NSCoder!) { 
    aCoder.encodeObject(lat, forKey: "latitude") 
    aCoder.encodeObject(lon, forKey: "longitude") 
} 

和那我會得到我的對象數組的字符串方式:

var endlist = [Coordinate]() 

let data = try NSJSONSerialization.dataWithJSONObject(endlist , options: options)   
let string = NSString(data: data, encoding: NSUTF8StringEncoding)   
json["points"] = string 

現在我得到這個錯誤:

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '在JSON寫入無效型(Test.Coordinate)'

有人可以幫我解決這個問題嗎?

所以在JSON [ 「點」]必須是這樣的:

"points": [ 
{"lat": 47424212, "lon": 8855883}, 
{"lat": $lat2, "lon": $lon2} 
] 

謝謝!

回答

2

您無法使用NSCoding對您的Coordinate類進行編碼。你可以做的一件事是創建一些方法將其轉換爲一些JSON對象,然後將其轉換爲json字符串。然後你可以使用一個簡單的結構來代替NSObject類型的類。

public struct Coordinate { 
    public var lat: Double 
    public var lon: Double 

    func toJSONDict() -> [String: String] { 
     return [ 
      "lat": String(lat), 
      "lon": String(lon) 
     ] 
    } 
} 



var endlist = [Coordinate]() 

endlist.append(Coordinate(lat: 47424212, lon: 8855883)) 

let jsonDict = endlist.map{ $0.toJSONDict() } 

print(jsonDict) 

if let jsonData = try? NSJSONSerialization.dataWithJSONObject(jsonDict, options: .PrettyPrinted) { 
    if let jsonString = String(data: jsonData, encoding: NSUTF8StringEncoding) { 
     print(jsonString) 
    } 
}