2015-01-04 9 views
0

스위프트 프로젝트에서 작동하도록 AFNetworking 2.5를 연결했습니다.스위프트의 AFNetworkingRequestManger.GET에 튜플을 전달합니다.

internal func performAction(var httpMethod: String, var url : String, headers: Dictionary<String, String>?, params: Dictionary<String, AnyObject>?, successClosure: ((operation: AFHTTPRequestOperation, responseObject: AnyObject?) ->())?, failureClosure: ((operation: AFHTTPRequestOperation, error: NSError) ->())?) { 
     let manager = AFHTTPRequestOperationManager()    

     let internalSuccessClosure = { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in 
      if let succ = successClosure { 
       succ(operation: operation, responseObject: responseObject) 
      } 
     } 

     let internalFailureClosure = { (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in 
      if let fail = failureClosure { 
       fail(operation: operation, error: error) 
      } 
     } 

     var methodParams = (url, params, internalSuccessClosure, internalFailureClosure) 

     if httpMethod == HTTP_METHOD_GET { 
      manager.GET(methodParams) 
     } else if httpMethod == HTTP_METHOD_POST { 
      manager.POST(methodParams) 
     } 
    } 

스위프트 컴파일러는 불평 :

나는 다음과 같은 기능이) 모두 manager.GET(methodParams)manager.POST(methodParams)

manager.GET (에 대한 다음 호출에 대한 Missing argument for parameter 'parameters' in call 예상대로 컴파일 :

manager.GET(url, 
      parameters: params, 
      success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in 
        if let succ = successClosure { 
         succ(operation: operation, responseObject: responseObject) 
        } 
       }, 
      failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in 
        if let fail = failureClosure { 
         fail(operation: operation, error: error) 
        } 
      }) 

여러 인수 매개 변수에 대해 튜플을 전달하는 기본 예제를 시도해 보았습니다. 왜 여기에 문제가 있는지 확신 할 수 없습니다.

나는 운동장에서 이것을 시도, 그것은 예상대로 작동합니다

func addTwoNumbers(x: Int, y: Int) -> Int { 
    return x + y 
} 

let twoNumbers = (1,2) 

addTwoNumbers(twoNumbers) 

나는 체크 아웃 한 : https://medium.com/swift-programming/facets-of-swift-part-4-functions-3cce9d9bba4How to append a tuple to an array object in Swift code?하지만 그들은 내가 문제를 해결하는 데 도움이 할 수 없었다.

+0

이 접근법의 문제점은 유형 오류가있는 Xcode/컴파일러에서 많은 도움을 얻지 못한다는 것입니다. 클로저 표현식에 대한 인수 중 일부는 선택 사항을 사용해서는 안됩니다. 'NSError'가 아닌'NSError' (문장이 끝나야합니까?) 혼란을 피하기 위해 거기에 넣지 않을 것입니다 : –

+0

Bridged Objective의 필수 매개 변수와 같은 크기의 튜플을 사용할 수 있습니다. -C 코드? 나는 그것을 직접 시도하지 않았지만 그것이 Swift 네이티브 코드에서만 사용 가능하다면 놀랄 일이 아닙니다. 따라서 [Alamofire] (https://github.com/Alamofire/Alamofire) 라이브러리를 사용해 볼 수 있습니까? –

+1

@AndrewMonshizadeh 훌륭한 제안! 나는 그 존재를 몰랐다 .... 그러나 설명서를 보면서, AFNetworking을 사용하여 "UIImageView에 이미지를 비동기 적으로로드하는 것과 같은 UIKit 확장"을 제안합니다. 이것은 필요한 기능입니다. –

답변

0

튜플을 매개 변수 값으로 objective-c 코드에 전달할 수없는 것으로 보입니다.