Swift 斯威夫特4。通过json url数据创建标记
我想用我的url中的json数据在google地图上创建标记。 创建标记的GMS函数必须在主线程上调用。 当我在主线程上创建标记时,我的数据显示count=0Swift 斯威夫特4。通过json url数据创建标记,swift,xcode,Swift,Xcode,我想用我的url中的json数据在google地图上创建标记。 创建标记的GMS函数必须在主线程上调用。 当我在主线程上创建标记时,我的数据显示count=0 var arrMarker = [Marker]() var arrdata = [json_data]() func getData(){ let url = URL(string: "http://www.kalasinmots.go.th/json_service/get_data.php") URLSessio
var arrMarker = [Marker]()
var arrdata = [json_data]()
func getData(){
let url = URL(string: "http://www.kalasinmots.go.th/json_service/get_data.php")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
do{
if error == nil{
self.arrdata = try JSONDecoder().decode([json_data].self, from: data!)
//print("arrdata count = ",self.arrdata.count)
for row in self.arrdata{
if(row.data_latlng != ""){
print(row.data_id,":",row.data_name,":",row.data_latlng)
let latlng = row.data_latlng.components(separatedBy: ",")
let lat = latlng[0]
let lng = latlng[1]
let myLat = (lat as NSString).doubleValue
let myLng = (lng as NSString).doubleValue
self.arrMarker.append(Marker(name:row.data_name,lat:myLat,long:myLng))
for row in self.arrMarker{
self.marker.position = CLLocationCoordinate2D(latitude: row.lat, longitude: row.long)
self.marker.title = row.name
self.marker.map = self.mapView
// Add the map to the view, hide it until we've got a location update.
self.view.addSubview(self.mapView)
}
}
}
}
}catch{
print("Error in get json data")
}
}.resume()
print("addmarker show count = ",arrMarker.count)
}
在self.arrmaker循环中的
for行之后,将print
行以及接收JSON数据后要执行的所有其他操作放入异步闭包中。是的,回调是异步的,因此在下载数据之前执行print语句整个闭包,{(数据、响应、错误)在…
is中。一旦收到服务器的响应,就会调用闭包。这里是我可以创建标记的检查请重新阅读我的第一条注释。