2015-03-13 117 views
0

我應該對一個url進行http調用,它將根據我在url結尾處返回的結果返回「Invalid」或「Valid」。但我無法弄清楚如何去做。我對http很新,並不完全確定它是如何工作的。但我走了這麼遠:如何從http請求中快速獲取字符串

func httpcall(urlbit: String) { 
    var urlor = "http://notrealurl.com/etix.asp?t=scanticket&sid=100000&tid=" 
    urlor += urlbit 

    let url = NSURL(string: urlor) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     var feedback = (NSString(data: data, encoding: NSUTF8StringEncoding)) 
    } 

    task.resume() 

    if feedback == "invalid" { 
     return false 
    } else if feedback == "valid" { 
     return true 
    } 
} 

很顯然,這是行不通的。期待反饋回報任何東西顯然是荒謬的。我只需要弄清楚如何訪問通過調用url獲得的任何數據,更具體地說,我需要獲取該服務器應該發送給我的字符串。

編輯:好的,所以我學到了更多關於NSURL的知識,並且我認爲我有一些幾乎一致的東西。它仍然不起作用,但我相信我正在接近。這裏是我的代碼:

func httpcall2(urlbit: String, onResult: (Bool)-> Void) { 
    var urlor = "http://notreal.com/etix.asp?t=scanticket&sid=100000&tid=" 
    urlor += urlbit 

    let url = NSURL(string: urlor) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     var feedback = (NSString(data: data, encoding: NSUTF8StringEncoding)) as String! 
     onResult(response=="Invalid") 
    } 

    task.resume() 
} 

這裏就是我用它來調用函數

httpcall2(mystr, { (responseWasInvalid: Bool) in 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    if responseWasInvalid == true { 
     self.messageLabel.text = "valid" 
    } else if responseWasInvalid == false { 
     self.messageLabel.text = "invalid" 
    } 

    }) 
}) 

它似乎仍然沒有真正從調用URL收到任何東西。

+0

要輸入文本作爲代碼,請用4個空格縮進行。有可能需要查看的發佈指南。 – chrissukhram 2015-03-13 17:36:06

回答

0

將if if檢查放入閉包中。您當前的代碼是沒有意義的,因爲你正在檢查的響應響應可用之前

更新

一個解決辦法是這樣的:

func networkFunction(query: String, completion: (success: Bool) -> Void) { 
    var url = "http://notrealurl.com/etix.asp?t=scanticket&sid=100000&tid=" + query 

    let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!, completionHandler: { (responseData, response, error) -> Void in 
     if error == nil { 
      let feedback = NSString(data: responseData, encoding: NSUTF8StringEncoding) 

      completion(success: feedback == "valid") 
     } else { 
      println(error) 
      completion(success: false) 
     } 
    }) 
} 

networkFunction("what ever", { (success) -> Void in 
    println(success) 
    /* if you want to update the UI have to do it on the main thread: 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     view.backgroundColor = .redColor() 
    }) 
    */ 
}) 

請在一般的瞭解閉包瞭解它是什麼以及如何使用它

+0

沒關係,所以我編輯了一下。 http://pastebin.com/43PPsiKG,但現在它說:「使用未解析的標識符,'returnstate'」。我該如何解決這個問題? – spudzee111 2015-03-13 17:44:38

+0

好吧,所以事實證明我的函數聲明瞭變量returnstate並在http調用之前得到編輯它的機會。你有什麼想法來解決這個問題嗎? – spudzee111 2015-03-13 18:08:25

+0

我已經更新了答案。看看 – HorseT 2015-03-13 19:45:30