스위프트 프로젝트에서 작동하도록 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-3cce9d9bba4 및 How to append a tuple to an array object in Swift code?하지만 그들은 내가 문제를 해결하는 데 도움이 할 수 없었다.
이 접근법의 문제점은 유형 오류가있는 Xcode/컴파일러에서 많은 도움을 얻지 못한다는 것입니다. 클로저 표현식에 대한 인수 중 일부는 선택 사항을 사용해서는 안됩니다. 'NSError'가 아닌'NSError' (문장이 끝나야합니까?) 혼란을 피하기 위해 거기에 넣지 않을 것입니다 : –
Bridged Objective의 필수 매개 변수와 같은 크기의 튜플을 사용할 수 있습니다. -C 코드? 나는 그것을 직접 시도하지 않았지만 그것이 Swift 네이티브 코드에서만 사용 가능하다면 놀랄 일이 아닙니다. 따라서 [Alamofire] (https://github.com/Alamofire/Alamofire) 라이브러리를 사용해 볼 수 있습니까? –
@AndrewMonshizadeh 훌륭한 제안! 나는 그 존재를 몰랐다 .... 그러나 설명서를 보면서, AFNetworking을 사용하여 "UIImageView에 이미지를 비동기 적으로로드하는 것과 같은 UIKit 확장"을 제안합니다. 이것은 필요한 기능입니다. –