iOS:将数据传递给另一个class

iOS: pass data to another class

我的 class 名为 "Service",在里面我用 Alamofire 做了很多 GET/POST 请求,请求 ID 为 this

的一个例子
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{

                }
        }
    }

来自我的 viewcontroller:

    let service = Service.sharedInstance

    service.requestDocuments()

我能用什么?委托方法?或者是什么? swift 中的最佳解决方案是什么?

是的。有 3 种主要方法可以做到这一点。这个想法是你想向 class 发送一个呼叫,在这种情况下,用于网络,并让它稍后返回并做一些事情。

委托+协议非常适合这个:

http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

积木也是如此

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

另一种流行的方式是 KVO,但这对您的示例来说并不理想。

我会在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
    }
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
         }
      }

}

我认为闭包是最好的解决方案。

使用委托是最好的方法。 请参阅下面的示例,其中演示了委派方法

AFNetworking 2.0 - How to pass response to another class on success

另一种方法是 NSNotification