gpt4 book ai didi

xcode - Swift:为什么我的 completionHandler 闭包返回一个值?

转载 作者:行者123 更新时间:2023-11-28 13:18:33 26 4
gpt4 key购买 nike

我正在尝试创建一个 HTTP 请求并返回一些 JSON 数据。它正确连接到 API 并返回数据,但是当我运行该应用程序时,它返回我打印的行(“错误”),而没有继续通过该应用程序。如果我删除 println 并继续通过断点,应用程序将永远运行,而我无法继续通过断点。

我确信我对闭包的工作原理有一些根本性的误解。我在这里缺少什么?

func logIn() {

var url = "https://www.photoshelter.com/psapi/v3/mem/authenticate?api_key=(api_key)&email=(email)&password=(password)&mode=token"
var baseURL:NSURL? = NSURL(string: url)
var request: NSMutableURLRequest? = NSMutableURLRequest(URL: baseURL!)
var session = NSURLSession.sharedSession()
var task = session.dataTaskWithRequest(request!, completionHandler: { (data, response, error) -> Void in
println("Error")
var responseObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)

})
task.resume()
}
@IBAction func signInButton(sender: AnyObject) {
logIn()
}

最佳答案

我几乎所有的网络都采用这种方式或与之相近的方式。看起来您的实现实际上没有做任何事情。

func logIn() {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true

let url = NSURL(string: "https://www.photoshelter.com/psapi/v3/mem/authenticate?api_key=(api_key)&email=(email)&password=(password)&mode=token")
let session = NSURLSession.sharedSession()

// Request
let request = NSMutableURLRequest(URL: url!)
// You can set request properties like HTTPMethod and HTTPBody to customize things

let loginUserDataTask = session.dataTaskWithRequest(request, completionHandler: { data, response, error in
var success = false

if let error = error {
println("Failure! \(error)")
if error.code == -999 { return }
} else if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
if let array = parseJSON(data) {
success = true
// Do something with array
}
} else {
println("Failure! \(response)")
}
}
dispatch_async(dispatch_get_main_queue()) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
})
loginUserDataTask?.resume()
}

这里是 parseJSON: 来处理数据:

func parseJSON(data: NSData) -> [AnyObject]? {
var error: NSError?
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error) as? [AnyObject] {
return json
} else if let error = error {
println("JSON Error: \(error)")
} else {
println("Unknown JSON Error")
}
return nil
}

关于xcode - Swift:为什么我的 completionHandler 闭包返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com