Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Ios Alamofire)我希望始终处理新请求_Ios_Alamofire - Fatal编程技术网

Ios Alamofire)我希望始终处理新请求

Ios Alamofire)我希望始终处理新请求,ios,alamofire,Ios,Alamofire,(头) 嗨,我正在制作地图应用程序,显示一些信息 用户可以通过触摸移动地图位置,应用程序显示一些信息 当用户触摸完成时,应用程序通过Location从REST API请求信息。这个位置可以从不同的API获取 (正文) 当用户长距离移动地图时,会出现很多请求。这种情况使我的申请速度变慢 所以我想一直提出这个要求 在发生太多请求的情况下,我如何请求更新的信息 这是我的请求代码 我在等待你的帮助 代码) 请求位置 请求信息 实被调用函数 private func doReverseGeocoding(

(头) 嗨,我正在制作地图应用程序,显示一些信息

用户可以通过触摸移动地图位置,应用程序显示一些信息

当用户触摸完成时,应用程序通过Location从REST API请求信息。这个位置可以从不同的API获取

(正文) 当用户长距离移动地图时,会出现很多请求。这种情况使我的申请速度变慢

所以我想一直提出这个要求

在发生太多请求的情况下,我如何请求更新的信息

这是我的请求代码

我在等待你的帮助

代码)

  • 请求位置
  • 请求信息
  • 实被调用函数
  • private func doReverseGeocoding(lat: Double, lng: Double, completionHandler: @escaping (Bool, Address?, String?) -> Void) {
        let id = HTTPHeader(name: "X-NCP-APIGW-API-KEY-ID", value:"sb10h4g44n")
        let key = HTTPHeader(name: "X-NCP-APIGW-API-KEY", value:"Czs7ZzPQHmgvPg0Y2cfMQEjxNg2WgOUB9LgS2uno")
        let headers: HTTPHeaders = HTTPHeaders([id, key])
        let urlString = "https://naveropenapi.apigw.ntruss.com/map-reversegeocode/v2/gc?request=coordsToaddr&coords=\(lng),\(lat)&sourcecrs=epsg:4326&output=json&orders=admcode,addr"
    
        guard let url = URL(string: generateURL(string: urlString)) else {
          return
        }
    
        AF.request(url, method: .get, headers: headers)
          .validate()
          .responseDecodable(of: NaverRoot.self) { (response) in
            guard let root = response.value else {
              completionHandler(false, nil, "[NAVER API] 리버스 지오코딩 정보를 불러올 수 없습니다. : \(response)")
              self.camera.setAddress(address: Address())
              return
            }
    
            if root.status.code == 3 {
              completionHandler(false, nil, "[NAVER API] 상세 주소 불러오기에 실패했습니다.")
              return
            }
    
            let region: Geo
            let landNumber: Land?
    
            if root.results.count == 2 {
              region = root.results[1].region
              landNumber = root.results[1].land
              self.currentAddress.setAddress(region: region, landNumber: landNumber)
            }
            else {
              region = root.results[0].region
              self.currentAddress.setAddress(region: region, landNumber: nil)
    
            }
    
            let address = self.camera.address
    
            if address.cityTown == self.currentAddress.cityTown {
              completionHandler(false, nil, nil)
            }
            else {
              self.camera.setAddress(address: self.currentAddress)
              completionHandler(true, self.currentAddress, "[NAVER API] 리버스 지오코딩 성공")
            }
        }
      }
    
    
    private func fetchStores(code locationCode: String,
                               address: String) {
        self.loadingIndicator.isHidden = false
    
        let startTime = CFAbsoluteTimeGetCurrent()
    
        let urlString = "https://openapi.gg.go.kr/RegionMnyFacltStus?KEY=\(KKD_APIKey)&TYPE=json&pSize=\(numberOfData)&REFINE_LOTNO_ADDR=\(address)"
        let url = generateURL(string: urlString)
    
        killAllRequest()
    
        AF.request(url)
          .validate()
          .responseDecodable(of: StoreRoot.self) { (response) in
            print("run time: \(CFAbsoluteTimeGetCurrent() - startTime)")
            guard let root = response.value else {
              print("[GG API]데이터를 불러올수 없습니다.: \(response)")
              print("[GG API]실패파라미터: \(address)")
              self.loadingIndicator.isHidden = true
              return
            }
    
            guard let head = root.RegionMnyFacltStus[0].head else {
              print("[GO API]요청 해더 디코딩에 실패했습니다.")
              return
            }
    
            guard let count = head[0].count else {
              print("[GG API]불러온 가맹점 카운팅에 실패했습니다.")
              return
            }
    
            guard let stores = root.RegionMnyFacltStus[1].row else {
              print("[GG API]가맹점 정보를 불러오는데 실패했습니다.")
              return
            }
    
            print("[GG API] \(address)지역에 대한 \(count)개의 가맹점 정보를 불러오는데 성공했습니다.")
            // 캐싱을 위한 저장.
            self.map.stores = stores
            self.loadingIndicator.isHidden = true
    
            // 마커 설정.
            self.setMarkers()
    
        }
      }
    
     private func findStoreFollowCameraCoord(location: CLLocation) {
        doReverseGeocoding(lat: location.coordinate.latitude, lng: location.coordinate.longitude) { (isSuccess, address, message) in
          guard let message = message else { return }
          print(message)
    
          if isSuccess {
            guard let address = address else { return }
            let currentCityCode = CityCode.shared.returnCityCode(city: address.city)
            self.fetchStores(code: currentCityCode, address: address.cityTown)
          }
          else {
            return
          }
        }
      }