使用Alamofire和SwiftyJson从函数返回值

我有一个返回信息菜单(基本上是菜单,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和SwiftyJson从函数返回值 的全部内容, 来源链接: utcz.com/qa/412468.html

回到顶部