2016-09-16 2 views
0

Я только что обновил рабочий Swift 2 Свифта 3 программы, и я получаю сообщение об ошибке,Swift 2 to Swift 3: Невозможно преобразовать значение типа '(Data ?, NSError?) -> Void' to to ожидаемый тип аргумента 'GTMSessionFetcherCompletionHandler?'

Невозможно преобразовать значение типа «(Data ?, NSError?) -> Пустота» ожидаемого типа аргумента «GTMSessionFetcherCompletionHandler ?

Вот соответствующие детали (я надеюсь):

let fetcher = GTMSessionFetcher(urlString:url) 
fetcher.authorizer = parentController.service.authorizer 
fetcher.beginFetch(completionHandler: handleDownload(studentNum)) 
             ^^^^ causing the error 

Функция для completionHandler:

func handleDownload(_ studentNum:Int) -> (Data?, NSError?) -> Void { 
    return { (data: Data?, error: NSError?) -> Void in 
     // code for function 
    } 
} 

GTMSessionFetcherCompletionHandler определен в заголовке Objective-C, как показано ниже:

#define GTM_NULLABLE_TYPE __nullable 
typedef void (^GTMSessionFetcherCompletionHandler)(NSData * GTM_NULLABLE_TYPE data, 
               NSError * GTM_NULLABLE_TYPE error); 

Я пробовал ch anging handleDownload() к следующему:

func handleDownload(_ studentNum:Int) -> (GTMSessionFetcherCompletionHandler?) { 
    return { (data: Data?, error: NSError?) -> Void in 
     // code for function 
    } 
} 

но перемещает ошибку вниз к этой функции: «Невозможно преобразовать возвращаемое выражение типа„(? Data ?, NSError) -> Пустота“для возврата типа«GTMSessionFetcherCompletionHandler? '"

Я не могу понять, как сохранить переменные и переменные в валюте (?) И скомпилировать их.

ответ

6

Согласно SE-0112, NSError теперь соединен с Swift как протокол Error. В самом деле, если вы + щелчок на GTMSessionFetcherCompletionHandler типа в Swift, вы увидите, как именно это мостик:

typealias GTMSessionFetcherCompletionHandler = (Data?, Error?) -> Void 

Поэтому вам просто нужно изменить свою подпись handleDownload(_:) «ы, чтобы отразить это:

func handleDownload(_ studentNum:Int) -> (Data?, Error?) -> Void { 
    return { (data: Data?, error: Error?) -> Void in 
     // code for function 
    } 
} 
+0

Ах, я вижу. Трюк Option-click тоже хорош! –

+0

Я должен добавить - это повлияло и на другие части моего кода - я заставил некоторый код использовать NSError, и это вызвало ошибку времени выполнения. Я бы не понял ошибку времени выполнения без вашего ответа. Так что спасибо тебе! –

+0

@ChrisGregg Happy to help :) – Hamish

0
WORequestManager.shared().genericRequest(withMethod: "GET", webserviceName: walletAPI, andParameters: params, showLoading: true, success: { (responseDictionary: [AnyHashable: Any]?) in 


     }, failure: { (error: Error?) in 

    }) 
+0

Хотя этот фрагмент кода может ответить на вопрос, он не дает никакого контекста, чтобы объяснить, как и почему. Подумайте о том, чтобы добавить предложение или два, чтобы объяснить ваш ответ. – brandonscript

Смежные вопросы

 Смежные вопросы