2017-06-02 32 views
2

我已經使用一組信息創建了一個對OnRadar的請求來創建地理圍欄。但是,我嘗試創建時間/延遲不會阻止for循環每秒觸發超過10次,這是API無法處理的。我將如何防止for循環每秒發射超過10次?

func setUpGeofences(){ 

    for object in geofenceArray{ 

     let params: [String: Any] = [ 
      "description": object.name, 
      "tag": object.tag, 
      "externalId": object.externalID, 
      "type": "circle", 
      "coordinates": [object.lat, object.long], 
      "radius": object.radius, 
      ] 

     let headers = ["Authorization: Key"] 
     let rq = Alamofire.request("https://www.onradar.com/api/v1/geofences", method: .post, parameters: params, encoding: URLEncoding.httpBody, headers: headers) 
      .responseJSON { response in 

       print(response.result.value) 
       print(response.result.error) 
      } 
    } 
} 

這是我用for循環的函數。我看了幾個例子,但是當我嘗試將它們應用於自己的工作時,我沒有成功。此外,一旦它爲我的數組中的每個位置創建地理圍欄後,如何停止運行循環?

+0

我會聯繫OnRadar支持,並詢問是否有API支持在單個網絡調用中創建多個地理圍欄。 例如,詢問是否可以傳遞地理圍欄數組來創建此請求。 – Stephen

回答

0

他們是困難的這些情況,試試這個:

var i = 0 
let geofencesArray = ["firstObject", "secondObject", "thirdObject"] 

func iterate(array: [String]) { 

    if i > array.count-1 { 
    return 
    } else { 
     print(array[i]) 
     i+=1 
     iterate(array: array) 
    } 
} 

iterate(array: geofencesArray) 
+0

這並不回答問題,這個過程遞歸不會顯着影響它的時間。 –

1

下面是簡單的方法請求完成後下一個:

變化geofenceArray: [Geo]到任何類型geofenceArray

func setUpGeofences(geofenceArray: [Geo]) { 
    if let object = geofenceArray.first { 
     let params: [String: Any] = [ 
      "description": object.name, 
      "tag": object.tag, 
      "externalId": object.externalID, 
      "type": "circle", 
      "coordinates": [object.lat, object.long], 
      "radius": object.radius, 
      ] 

     let headers = ["Authorization: Key"] 
     let rq = AlamofireRequest("https://www.onradar.com/api/v1/geofences", method: .post, parameters: params, encoding: URLEncoding.httpBody, headers: headers) 
      .responseJSON { response in 

       print(response.result.value) 
       print(response.result.error) 
       // do the next one 
       setUpGeofences(geofenceArray: Array(geofenceArray.dropFirst())) 
     } 
    } 
} 

它不保證每秒慢10次,但現在可能已經夠用了。

+0

我會給這個鏡頭,是否有一個簡單的方法只允許循環運行等於'geofenceArray.count'的次數? –

+0

我的代碼會做到這一點。它會一直移除第一個元素,然後在元素用完時停止。 –