gpt4 book ai didi

ios - 方法中返回 Json 对象,无法将 NSDictionary 转换为 Void

转载 作者:行者123 更新时间:2023-11-29 02:17:59 24 4
gpt4 key购买 nike

我有一个单独的类用于所有 json api 请求调用:userJson.swift

我希望这里有返回 json 的函数,这样我就可以在 Controller 中使用 json。这是我在其中的功能之一:

func signIn(email: String, username: String, password: String){

var request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: signUpURL)
request.HTTPMethod = "POST"
let body = "email=\(email)&username=\(username)&password=\(password)"
request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)

let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in

if (error != nil) {
return error
} else {
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

return json
}
}

task.resume()

}

我想返回 json,但它给了我一个错误:“NSDictionary”不能转换为“Void”。我怎样才能返回 json 以便我可以在我的 Controller 中使用它?

最佳答案

您使用的方法不正确,因为:

  1. signIn 函数返回 Void

这里你想返回一个对象,可以是字典或错误。

  1. dataTaskWithRequest 方法以异步方式执行。所以,返回会给你一个没有值(value)的结果。

当我谈到异步时尚代码时,我指的是像下面这样的模式:

  • signIn 函数被调用
  • dataTaskWithRequest 被调用
  • signIn 函数完成
  • 调用 dataTaskWithRequest 的完成处理程序

您必须稍微更改signIn 方法的签名才能考虑到这一点。例如利用如下关闭机制(我提供的代码仅用于说明目的)。

func signIn(email: String, username: String, password: String, completionHandler: ((AnyObject?, NSError?) -> Void)) {

var request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: signUpURL)
request.HTTPMethod = "POST"

let body = "email=\(email)&username=\(username)&password=\(password)"
request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)

let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in

if (error != nil) {
completionHandler(nil, error)
} else {
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
completionHandler(data, nil)
}
}

task.resume()
}

用法

signIn("email", username: "username", password: "password") { (json, error) -> Void in
if let er = error {
println("\(er)")
}
}

关于ios - 方法中返回 Json 对象,无法将 NSDictionary 转换为 Void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527861/

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