2016-04-28 18 views
0

Im Gerät testen Sie derzeit meinen Alamofire-Code. Ich versuche, eine wiederverwendbare Methode zu erstellen, die ich in einem Statuscode und einer Methode weitergeben kann, die als Parameter aufgerufen werden müssen. Ich dachte daran, einen Block zu verwenden, aber die Syntax entgeht mir und es hilft mir nicht, dass ich mit Swift angefangen habe. Hier ein Beispiel:Funktion als Parameter einfügen

func parseJsonResponse(response: Response <AnyObject, NSErrror>){ 
    //parsing 
} 

func test_networkRequest(withStatusCode statusCode: Int, /* parse function as parameter */) { 

     stub(isHost("https://httpbin.org")) { _ in 

     return OHHTTPStubsResponse(fileAtPath:OHPathForFile("wsresponse.json", self.dynamicType)!, 
      statusCode:statusCode, headers:["Content-Type":"application/json"]) 
    }) 

    Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) 
     .responseJSON { response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serialization 
      XCTAsertNotNil(response) 


      if let JSON = response.result.value { 
       print("JSON: \(JSON)") 
      } 

      //method should go here 
      self.parseJsonResponse(response) 


    } 
} 

Ich möchte in der Lage zu machen ‚test_networkRequest‘ wiederverwendbar in allen meinen Klassen, und es werden verschiedene Arten von json sein analysiert und auf verschiedene Weise behandelt werden. Deshalb würde ich gerne eine Funktion als Parameter in 'test_networkRequest' übergeben können.

Ich hoffe, mein Endziel ist klar, und ich bin offen für Vorschläge, wenn ich von der Spur bin. :)

Antwort

1

Um einen Block zu erstellen, tun Sie etwas wie folgt aus:

class Foo { 
    var block: (statusCode: Int) -> Void 
    var optionalBlock: ((argA: Int, argB: String) -> Bool)? // in case you're curious 

    init() { 
     block = { (statusCode: Int) -> Void in 
      // This is the block that can now be passed 
     } 
    } 
} 

Vielleicht möchten Sie über Ihre Entscheidung denken, wenn ein Block zu verwenden. Aus dem Satz "Ich möchte 'test_networkRequest' in allen meinen Klassen wiederverwendbar machen ..." Es klingt so, als ob das als Funktion in einer Superklasse besser wäre.