Я только что обновил рабочий 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? '"
Я не могу понять, как сохранить переменные и переменные в валюте (?) И скомпилировать их.
Ах, я вижу. Трюк Option-click тоже хорош! –
Я должен добавить - это повлияло и на другие части моего кода - я заставил некоторый код использовать NSError, и это вызвало ошибку времени выполнения. Я бы не понял ошибку времени выполнения без вашего ответа. Так что спасибо тебе! –
@ChrisGregg Happy to help :) – Hamish