swift - 使用 Alamofire 和 SwiftyJson 从函数返回值

标签 swift alamofire swifty-json

我有一个返回信息菜单的应用程序(基本上是菜单、menu_headers 和项目)。我想要这样的东西:

EKMenu.getMenu(menu_id: Int)

这将返回一个菜单,但我想我在这里需要一个完成处理程序。

我目前有:

class func getMenu(menu_id: Int){
//class func getMenu(menu_id: Int, completionHandler:(NSArray -> Void)){

  let url="https://www.example.com/arc/v1/api/menus/\(menu_id)/mobile"
  Alamofire.request(.GET, url).responseJSON() {
    (_, _, data, _) in
    println("within menu request")
    var json=JSON(data!)
    var menu=EKMenu()
    menu.name=json["menu"]["name"].stringValue
    for (key, subJson) in json["menu"]["menu_headers"]{
      EKMenu.processMenuHeaders(subJson)
    }
    // how would we return a value here ?????
  }
}

  class func processMenuHeaders(menu_header: JSON){
    let mh_name=menu_header["name"].stringValue
    println("mh_name: \(mh_name)")
    for (key, subJson) in menu_header["menu_headers"]{
      EKMenu.processMenuHeaders(subJson)
    }
  }

但是我该如何在这里返回一些东西呢?我 99% 确信它是某种类型的完成处理程序,但是,作为 Swift 和 Alamofire 的新手,我有点迷失。我见过I won't be able to return a value with Alamofire in Swift但要知道其中一些很快就会过时(即 Swift 1.1)

最佳答案

getMenu 函数的完成处理程序示例,假设 menu 是您想要“返回”的值:

class MenuManager {

    // the handler takes an EKMenu argument
    class func getMenu(menu_id: Int, completionHandler: (menu: EKMenu) -> ()) {

        let url="https://www.domain.com/arc/v1/api/menus/\(menu_id)/mobile"
        Alamofire.request(.GET, url).responseJSON() {
            (_, _, data, _) in
            println("within menu request")
            var json=JSON(data!)
            var menu=EKMenu()
            menu.name=json["menu"]["name"].stringValue
            for (key, subJson) in json["menu"]["menu_headers"]{
                EKMenu.processMenuHeaders(subJson)
            }

            // wrap the resulting EKMenu in the handler
            completionHandler(menu)

        }
    }

    class func processMenuHeaders(menu_header: JSON){
        let mh_name=menu_header["name"].stringValue
        println("mh_name: \(mh_name)")
        for (key, subJson) in menu_header["menu_headers"]{
            EKMenu.processMenuHeaders(subJson)
        }
    }

}

MenuManager.getMenu(42, completionHandler: { menu in
    // here the handler gives you back the value
    println(menu)
})

关于swift - 使用 Alamofire 和 SwiftyJson 从函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609243/

相关文章:

ios - 如何实现AppStore like header

ios - 删除标签栏 Controller 中的后退按钮文本更多导航 Controller

xcode - 背景音乐不起作用,但没有错误?

ios - 我在调用 API 时收到此错误 - "Thread 1: EXC_BAD _INSTRUCTION(code = EXC_1386_INVOP,subcode = 0*0)"

ios - dyld : Library not loaded: @rpath/SwiftyJSON. 框架/SwiftyJSON

ios - 根据来自后端的数据为 UITableView 中的部分设置数据源

ios - 如何使用 Alamofire 发出同步请求?

swift - 阿拉莫菲尔 4 请求开放天气

json - swiftyJSON 从 NSURL 解析 json

json - 如何将 DispatchSemaphore 与 Alamofire 和 SwiftyJSON 一起使用?