当前位置: 首页 > 面试题库 >

使用Alamofire和SwiftyJson从函数返回值

林俊晖
2023-03-14
问题内容

我有一个返回信息菜单(基本上是菜单,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来说,这是我的新手,我有点迷失了。我已经知道我无法使用Swift中的Alamofire返回值,但是知道其中某些值很快就会过时(例如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)
})


 类似资料:
  • 问题内容: 我正在尝试让Alamofire在GET请求中发送以下参数,但它发送的是乱码: 这是我的代码: 输出 {“ $ and”:[{“ name”:{“ $ bw”:“ duke”},“ country”:“ gb”}]} 这是我的参数要求: 这是AlamoFire发送的: 如您所见,filter参数是一团糟。我究竟做错了什么? 问题答案: 默认情况下,Alamofire使用POST正文中的“

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是

  • 问题内容: SwiftyJson和Alamofire如何将嵌套的json作为方法体发布如下(Swift 3) 我使用alamofire检查了许多post Jsonpost嵌套对象,如何使用Alamofire和SwiftyJSON访问嵌套的JSON值? ,对象和集合的AlamofireJSON序列化等。但是,在这种情况下,它们都不起作用。 问题答案: 试试这个 我希望这有帮助

  • 现在我们已经学习了带返回值的函数,我来告诉你一个秘密:main函数并非真的应该是一个void函数。main应该返回一个整数: int main () { return 0; } 通常,main的返回值为0,它表明程序成功执行。出错时一般返回-1,或其他的用以指明发生了哪种错误的值。 当然,你可能想知道这个值返回给谁了,因为我们自己从来没有调用过main。其实是这样,当系统执行程序时,它通过调

  • C++ 数组 C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:int * myFunction() { . . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 现在,让我们来看下面的函数,它会生成 10 个随机数,并