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

时间:2015-04-30 05:39:55

标签: ios swift delegates block delegation

我的班级名为“服务”,我在里面用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的最佳解决方案?

4 个答案:

答案 0 :(得分:1)

是。有三种主要方法可以做到这一点。这个想法是你要发送一个类的调用,在这种情况下,用于网络,并让它在以后的某个时间回来并做一些事情。

代表+协议非常棒:

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,但这并不适合你的例子。

答案 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