json - 如何获取 Alamofire 函数结果(完成)并将其设置为稍后可以在 Swift 3.1 中的代码中轻松调用的值?

标签 json swift xcode function swift3

我是 Swift 3 的新手。这是我的代码:

func callYelp(completionHandler: @escaping (AnyObject) -> ()) {

Alamofire.request("https://api.yelp.com/v3/businesses/search", parameters: getParameters, headers: headers)
    .responseJSON { response in
        switch response.result {
        case .success(let value):
            let json = JSON(value)
            //print("JSON: \(json)")
            let arrayNames =  json["businesses"].arrayValue.map({$0["name"].stringValue})
            let arrayRating =  json["businesses"].arrayValue.map({$0["rating"].stringValue})
            print(arrayNames, arrayRating)

            completionHandler(arrayNames as AnyObject)


        case .failure(let error):
            print(error)
        }
}

如何调用它并将其设置为变量?

callYelp() { responseObject in
        print(responseObject)
        return
    }

比如这样:

var Fruits = 函数调用。

谢谢

最佳答案

您无法按照您的意愿直接执行此操作。由于所有 Alamofire 函数都是异步运行的,因此您无法准确判断何时会得到结果,事实上,Alamofire.request 方法只为您提供一个对象,该对象您可以使用 responseJSON 或其他处理程序(例如 responseString)来锁定回调。您无法控制何时调用此回调 - 它将在请求完成时运行。

由于我们对 Request 所能做的就是向其添加回调,因此我们必须使用回调才能对请求的结果执行任何操作称呼。幸运的是,您可以将回调指定为闭包,并且闭包有一个特殊的属性:它们关闭其执行环境(因此得名),这意味着创建闭包的词法环境中可用的所有变量也可以在函数内部使用。

这意味着这是完全有效的代码:

var fruits: [String] = []
callYelp() { responseObject in
    fruits = responseObject
}

如果您需要在回调设置 fruits 时收到通知(因为您无法控制回调实际调用的时间),您可能需要添加 didSet observer水果:

var fruits: [String] = [] {
    didSet {
        //handle anything that needs to be handled
        //when you get data
    }
}
callYelp() {
    fruits = $0
}

在最后一个示例中,我使用了速记闭包参数语法,您可以使用隐式名称 $0$1 等,而不是命名每个闭包参数。

关于json - 如何获取 Alamofire 函数结果(完成)并将其设置为稍后可以在 Swift 3.1 中的代码中轻松调用的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593040/

相关文章:

arrays - 如何创建图像 URL 数组

自定义类型的 Swift Enum 符合哈希协议(protocol)

iphone - 在 bundle 中找不到名为 'Main' 的 Storyboard

带指针参数的 C++ 函数

c# - 在 C# 中向 json 对象添加属性

JavaScript 将 blob 保存到 localStorage

swift - 令人满意的var body : some View in protocol extension

ios - 如何在没有设备的情况下为App ID添加钥匙串(keychain)共享功能?

java - 如何从 LinkedHashMap 获取键?

json - 有没有办法向 Grails JSON 响应添加额外的字段?