【问题标题】:iOS: pass data to another classiOS:将数据传递给另一个类
【发布时间】:2015-07-09 16:30:44
【问题描述】:

我的班级名为“Service”,在里面我用 Alamofire 做了很多 GET/POST 请求,这是一个请求 id 的例子

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{

                }
        }
    }

从我的视图控制器:

    let service = Service.sharedInstance

    service.requestDocuments()

我可以使用什么?委托方法?要不然是啥? swift中最好的解决方案是什么?

【问题讨论】:

    标签: ios swift delegates block delegation


    【解决方案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
             }
          }
    
    }
    

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

    【讨论】:

      【解决方案2】:

      是的。有 3 种主要方法可以做到这一点。这个想法是你想向一个班级发出一个电话,在这种情况下,为了建立网络,让它稍后回来做一些事情。

      代表+协议对此非常有用:

      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而不是objc吗?
      • 我找不到带有在类之间传递数据的块的示例...(快速)
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        另一种方法是 NSNotification

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-13
          • 1970-01-01
          • 1970-01-01
          • 2021-06-11
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多