2015-03-13 115 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