2015-04-30 2 views
0

je ma classe nommée « Service » où à l'intérieur que je fais beaucoup de demande GET/POST avec Alamofire, un exemple d'id demande ceiOS: transmettre des données à une autre classe

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{ 

       } 
     } 
    } 

et de mon viewcontroller:

let service = Service.sharedInstance 

    service.requestDocuments() 

Que puis-je utiliser? déléguer la méthode? ou quoi? quelle est la meilleure solution dans swift?

Répondre

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

} 

Je pense que la fermeture est la meilleure solution.

1

Oui. Il y a trois façons principales de le faire. L'idée est que vous voulez envoyer un appel à une classe, dans ce cas, pour le réseautage, et le faire revenir plus tard et faire quelque chose.

délégués + Protocoles sont fantastiques pour cela:

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

Comme blocs sont

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

L'autre façon populaire est KVO mais ce n'est pas idéal pour votre exemple.

+0

Je sais que ces structures, pouvez-vous me suggérer quelque chose rapide et pas objc? – CrazyDev

+0

Je ne peux pas trouver quelque chose avec un exemple avec des blocs qui transmettent des données entre les classes ... (en swift) – CrazyDev

+0

http://hayageek.com/swift-blocks-tutorial/ ici ami :) –

1

Je vais utiliser fermeture rapide,

Par exemple

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

Puis ici pour utiliser

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

merci l'homme !!!! ! – CrazyDev