我应该对网址进行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"
}
})
})
它似乎仍然无法通过调用网址接收任何内容。
答案 0 :(得分:0)
将if else检查放在闭包内。您当前的代码没有意义,因为您在响应可用之前检查响应
<强>更新强>
解决方案可能是这样的:
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()
})
*/
})
请阅读一般情况下的闭包,以了解它是什么以及如何使用它