2016-07-27 73 views
0

我寫了下面的代碼來檢索while循環中的data by date。問題是,當數據被發現時,它不會退出循環。我想,我錯過了一些代碼來進行額外的檢查。如何在swift中找到數據時跳出while循環?

因爲print正在多次工作。請幫我解決。

while startdate.compare(enddate) != .OrderedDescending { 
    let mydate = Config.convertDateTimeFormater(Config.convertDateToString(startdate, fromFormat: 

    let test = [ 
     "date" : mydate 
    ] 
    JHProgressHUD.sharedHUD.showInView(self.view, withHeader: "Loading", andFooter: "Please wait") 
    Alamofire.request(.POST, Config.checkBookingSlot, parameters: test as? [String : AnyObject], headers: headers, encoding: .JSON).responseJSON { (responseData) -> Void in 
     if((responseData.result.value) != nil) { 
      let swiftyJsonVar = JSON(responseData.result.value!) 
      let msg = swiftyJsonVar["message"].stringValue 
      if (swiftyJsonVar["success"]) { 
       if let slotData = swiftyJsonVar["data"]["detail"].arrayObject { 
        if slotData.count > 0 { 
         isFound = true 
         print("Break") 
         JHProgressHUD.sharedHUD.hide() 
        } else { 
         JHProgressHUD.sharedHUD.hide() 
         self.showPopup(Config.showPopupMsg) 
        } 
       } else { 
        JHProgressHUD.sharedHUD.hide() 
        self.showPopup(Config.showPopupMsg) 
       } 
      } else { 
       JHProgressHUD.sharedHUD.hide() 
       isFound = true 
      } 
     } else { 
      JHProgressHUD.sharedHUD.hide() 
      isFound = true 
     } 
    } 
    if isFound { 
     break 
    } 
    startdate = calendar.dateByAddingUnit(.Day, value: 1, toDate: startdate, options: [])! 
} 
+1

您的代碼中看到這個曾經u得到的想法http://stackoverflow.com/questions/ 9418972/ios-break-nested-loop –

+0

而不是將網絡調用放入循環,使用'NStimer'或'Performselector'任務,以便您能夠通過響應檢查您的狀況。否則你的循環會在你得到第一個響應之前完成。 –

+0

你確定你正在接收和解析JSON數據嗎? – Feldur

回答

1

你正在你的循環內的異步請求,你的isFound變量設置封閉內,所以循環不會等待響應的那些。很可能您的循環會在您獲得第一個響應之前完成。

1

雖然sync方式循環工作和API調用總是在後臺工作意味着async所以你需要改變這樣的

func getData(startDate: NSDate) { 
    if (startDate.compare(enddate) != .OrderedDescending) { 
     let mydate = Config.convertDateTimeFormater(Config.convertDateToString(startdate, fromFormat: 

     let test = [ 
      "date" : mydate 
     ] 
     JHProgressHUD.sharedHUD.showInView(self.view, withHeader: "Loading", andFooter: "Please wait") 
     Alamofire.request(.POST, Config.checkBookingSlot, parameters: test as? [String : AnyObject], headers: headers, encoding: .JSON).responseJSON { (responseData) -> Void in 
      if((responseData.result.value) != nil) { 
       let swiftyJsonVar = JSON(responseData.result.value!) 
       let msg = swiftyJsonVar["message"].stringValue 
       if (swiftyJsonVar["success"]) { 
        if let slotData = swiftyJsonVar["data"]["detail"].arrayObject { 
         if slotData.count > 0 { 
          JHProgressHUD.sharedHUD.hide() 
         } 
         else { 
          JHProgressHUD.sharedHUD.hide() 
          self.showPopup(Config.showPopupMsg) 
          startDate = calendar.dateByAddingUnit(.Day, value: 1, toDate: startdate, options: [])! 
          self.getData(startDate) 
         } 
        } 
        else { 
         JHProgressHUD.sharedHUD.hide() 
         self.showPopup(Config.showPopupMsg) 
         startDate = calendar.dateByAddingUnit(.Day, value: 1, toDate: startdate, options: [])! 
         self.getData(startDate) 
        } 
       } 
       else { 
        JHProgressHUD.sharedHUD.hide() 
       } 
      } 
      else { 
       JHProgressHUD.sharedHUD.hide() 
      } 
     } 

    } 
} 
+0

那你是怎麼稱呼那個功能的?我想在日期範圍內同步。 – ppshein

+0

你有startDate正確的日期,你正在使用while循環只是使用該日期來調用這個函數像這樣'self.getData(startdate)' –

+0

它是行不通的,因爲while循環永遠不會等待同步結果。 – ppshein