Не удается вызвать «sendAsynchronousRequest» в Swift 2 со списком аргументов

В настоящее время я переписываю части своего кода Swift 1.2 для совместимости с Swift 2.0. На самом деле я не могу понять, какие изменения внесены в "sendAsynchronousRequest" - в настоящее время все мои запросы не выполняются.

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in})

Не удается вызвать «sendAsynchronousRequest» со списком аргументов типа «(NSURLRequest, очередь: NSOperationQueue, completeHandler: (NSURLResponse!, NSData!, NSError!) -> Void)»

У вас есть идея, что не так?


person Daniel K.    schedule 11.06.2015    source источник


Ответы (4)


В Swift 1.2 и Xcode 6.3 подпись sendAsynchronousRequest:queue:completionHandler: такова:

class func sendAsynchronousRequest(request: NSURLRequest,
    queue: NSOperationQueue!,
    completionHandler handler: (NSURLResponse!, NSData!, NSError!) -> Void)

Однако в бета-версии Swift 2 и Xcode 7 подпись sendAsynchronousRequest:queue:completionHandler: изменилась и теперь выглядит так:

// Note the non optionals, optionals and implicitly unwrapped optionals differences
class func sendAsynchronousRequest(request: NSURLRequest,
    queue: NSOperationQueue,
    completionHandler handler: (NSURLResponse?, NSData?, NSError?) -> Void)

Как следствие, переходя к бета-версии Swift 2 и Xcode 7, вам придется изменить реализацию параметра completionHandler и убедиться, что параметр queue не является необязательным.

person Imanou Petit    schedule 12.06.2015

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

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) in
  let string = NSString(data: data!, encoding: NSISOLatin1StringEncoding)
  print("Response \(string!)")
}
person Sandeep    schedule 11.06.2015

Поскольку NSURLConnection.sendAsynchronousRequest устарело в iOS 9. Следует использовать NSURLSession public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

person Jake Lin    schedule 03.09.2015

Свифт 3

    let url:URL? = URL(string:location)
    if url == nil {
        print("malformed url : \(location)")
    }

    NSURLConnection.sendAsynchronousRequest(URLRequest(url:url!),
        queue: OperationQueue.main)
    { (response: URLResponse?, data: Data?, error: Error?) -> Void in

    }
person altagir    schedule 12.11.2016