gpt4 book ai didi

arrays - Swift 2.0 对象数组到 JSON 字符串

转载 作者:搜寻专家 更新时间:2023-11-01 07:29:54 25 4
gpt4 key购买 nike

这是我的课:

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"] 中必须是这样的:

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

谢谢!

最佳答案

您不能使用 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)
}
}

关于arrays - Swift 2.0 对象数组到 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com