Arrays Swift3中json解析数组的奇怪结果
嗨,伙计们,我不知道为什么数组Places返回像0x6080004b3aa0这样的奇怪值,而不是显示我的JSON url中的标题、坐标和副标题。谢谢你的帮助Arrays Swift3中json解析数组的奇怪结果,arrays,json,swift3,Arrays,Json,Swift3,嗨,伙计们,我不知道为什么数组Places返回像0x6080004b3aa0这样的奇怪值,而不是显示我的JSON url中的标题、坐标和副标题。谢谢你的帮助 import MapKit @objc class Place: NSObject { var title: String? var coordinate: CLLocationCoordinate2D var subtitle: String? init(title:String,subtitle
import MapKit
@objc class Place: NSObject {
var title: String?
var coordinate: CLLocationCoordinate2D
var subtitle: String?
init(title:String,subtitle:String, coordinate:CLLocationCoordinate2D){
self.title = title
self.coordinate = coordinate
self.subtitle = subtitle
}
static func getPlaces() -> [Place] {
guard let url = NSURL(string: "https://script.googleusercontent.com/macros/echo?user_content_key=Z-LfTMdhgAg_6SRd-iMucSyWu-LFBQO8MLxJZ6DPcL05Rtr3joCCypWD2l46qaegSpVpVINc1DLl5inoDOgGx3p3ANpY1AkGOJmA1Yb3SEsKFZqtv3DaNYcMrmhZHmUMWojr9NvTBuBLhyHCd5hHa1ZsYSbt7G4nMhEEDL32U4DxjO7V7yvmJPXJTBuCiTGh3rUPjpYM_V0PJJG7TIaKp4bydEiKBUZP6fpOyGJIhkmEGneM7ZIlWloTVbXmkjs15vHn8T7HCelqi-5f3gf3-sKiW3k6MDkf31SIMZH6H4k&lib=MbpKbbfePtAVndrs259dhPT7ROjQYJ8yx") else { return [] }
let request = NSMutableURLRequest(url: url as URL!)
var places = [Place]()
let task = URLSession.shared.dataTask(with: request as URLRequest) {data,response,error in
guard error == nil && data != nil else {
print ("Error:",error)
return
}
let httpStatus = response as? HTTPURLResponse
if httpStatus?.statusCode == 200
{ if data?.count != 0
{
let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
let contacts = responseString["Sheet1"] as? [AnyObject]
for contact in contacts!{
var places = [Place]()
let title = contact["name"] as! String
let subtitle = contact["description"] as? String
let latitude = contact["latitude"] as? Double ?? 0, longitude = contact["longitude"] as? Double ?? 0
let place = Place(title:title,subtitle:subtitle!,coordinate: CLLocationCoordinate2DMake(latitude, longitude))
places.append(place)
print(latitude)
print(place)
}
}
else {
print("No data got from url")
}
} else {
print("error httpsatus code is:", httpStatus!.statusCode)
}
}
task.resume()
return places as [Place]
}
}
我认为问题在于:
让地点=地点(标题:标题,副标题:副标题!坐标:CLLocationCoordinate2DMake(纬度,经度))
当I
print(place)
它返回奇怪的结果当您创建一个从NSObject
子类的类时,您正在创建一个由Objective-c类支持的对象——在某些情况下,这可能非常有用(最常见的用法是当您想要将对象作为二进制数据块归档时)
我猜在您的情况下,您可能不想/不需要子类化NSObject
下面是一个简单的示例来说明发生了什么:
下面是一个由NSObject
支持的类:
@objc class ObjCPlace: NSObject {
let name: String
init(name: String) {
self.name = name
}
}
如果您创建此对象的实例并尝试打印内容-如您所发现的,您将获得内存中的对象位置:
let testObjcPlace = ObjCPlace(name: "New York")
print(testObjcPlace)
// prints:
// <__lldb_expr_310.ObjCPlace: 0x600000055060>
但是,您可能不想创建NSObject子类,而只想创建一个Swift类(或者在本例中是一个struct,以了解差异的解释)
由于此对象不是Objective-c对象,因此可以使用print并打印内部属性:
let testPlace = Place(name: "New York")
print(testPlace)
// Prints:
// Place(name: "New York")
p/s欢迎使用StackOverflow!我是否应该再次将此问题标记为重复问题?您是否阅读了上一个问题中的链接问题?它与Swift版本无关。在任何版本的Swift中,您都无法从包含异步任务的方法返回内容。奇怪打印结果的原因是您的
位置class缺少description
属性,所以只能得到指针地址。很抱歉@vadian,但我用plist尝试了完全相同的方法,效果非常好,所以为什么不能与外部json一起工作呢?再一次,dataTask
异步工作非常感谢!我想我现在已经找到了
struct Place {
let name: String
init(name: String) {
self.name = name
}
}
let testPlace = Place(name: "New York")
print(testPlace)
// Prints:
// Place(name: "New York")