2015-04-30 5 views
0

я мой класс с именем «Сервис», где внутри я много запроса GET/POST с Alamofire, пример запроса идентификатор этогоIOS: передать данные в другой класс

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() 

Что я могу использовать? метод делегата? или что? Какое лучшее решение в быстром?

ответ

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 
     } 
     } 

} 

Я думаю, что закрытие является лучшим решением.

1

Да. Существует 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

Другой популярный способ КВО, но это не является идеальным для вашего примера.

+0

Я знаю, что эти структуры, вы можете предложить мне что-то в быстрой и не в ObjC? – CrazyDev

+0

Я не могу найти что-то с примером с блоками, которые передают данные между классами ... (в быстром) – CrazyDev

+0

http://hayageek.com/swift-blocks-tutorial/ here friend :) –

1

Я буду использовать замыкание в быстры,

Например

class Service{ 
     func requestDocuments(completion:(response:AnyObject)->()){ 
      //After network is done 
      completion(response:data) 
     } 
    } 

Тогда здесь, чтобы использовать

service.requestDocuments { (response) ->() in 
     //Here you can get response async 
    } 
+0

спасибо человеку !!!! ! – CrazyDev

0

Используйте Делегат своим лучшим подходом. Пожалуйста, смотрите ниже пример, когда подход делегации

продемонстрировало,

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

Другой подход был бы NSNotification

+0

спасибо, но мне нужно было в Swift, но спасибо ... – CrazyDev