Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 斯威夫特4。通过json url数据创建标记_Swift_Xcode - Fatal编程技术网

Swift 斯威夫特4。通过json url数据创建标记

Swift 斯威夫特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

我想用我的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")
    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中。一旦收到服务器的响应,就会调用闭包。这里是我可以创建标记的检查请重新阅读我的第一条注释。