我的班级名为“服务”,我在里面用Alamofire做了很多GET / POST请求,这是一个请求ID的例子
i=3;cut -d\ -f$i<<<$id
789
来自我的viewcontroller:
func requestDocuments(){
request(.POST, "http://example.com/json/docs")
.responseJSON { (_, _, JSON, error) in
if error == nil{
var response = JSON as NSArray
println("array document: \(response)")
//**** HERE I WANT PASS VALUE TO MY VIEW CONTROLLER
}
else{
}
}
}
我可以使用什么?委托方法?或者是什么? 什么是swift的最佳解决方案?
答案 0 :(得分:1)
是。有三种主要方法可以做到这一点。这个想法是你要发送一个类的调用,在这种情况下,用于网络,并让它在以后的某个时间回来并做一些事情。
代表+协议非常棒:
http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
和块一样
另一种流行的方式是KVO,但这并不适合你的例子。
答案 1 :(得分:1)
我将在swift中使用闭包,
例如
class Service{
func requestDocuments(completion:(response:AnyObject)->()){
//After network is done
completion(response:data)
}
}
然后在这里使用
service.requestDocuments { (response) -> () in
//Here you can get response async
}
答案 2 :(得分:1)
func requestDocuments(completion:(data:NSArray?)){
request(.POST, "http://example.com/json/docs")
.responseJSON { (_, _, JSON, error) in
if error == nil{
var response = JSON as NSArray
println("array document: \(response)")
//**** HERE I WANT PASS VALUE TO MY VIEW CONTROLLER
completion(data:response)
}
else{
completion(data:nil)
}
}
}
var reqDoc = requestDocuments(){ (data) -> Void in
if let _data = data {
dispatch_async(dispatch_get_main_queue()) {
//Do something with data
}
}
}
我认为闭包是最好的解决方案。
答案 3 :(得分:0)
使用委托最好的方法。 请参见以下示例,其中委托方法已经演示
AFNetworking 2.0 - How to pass response to another class on success
另一种方法是NSNotification