Objective-C метод конфликтует с дополнительным требованием метода Swift
После обновления Xcode компилятор начал выдавать ошибку в рабочем коде (обе функции находятся в AppDelegate.swift).
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
FBLoginView.self
FBProfilePictureView.self
return true
}
С ошибкой:
/Пользователи/../AppDelegate.swift: приложение 14: 11: Objective-C method: didFinishLaunchingWithOptions: приложение, предоставленное методом ':():(): конфликтует с необязательным требованием метод application (: didFinishLaunchingWithOptions:) 'в протоколе' UIApplicationDelegate '
И второй
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: NSString?,
annotation: AnyObject) -> Bool {
var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication as! String)
return wasHandled
}
с ошибкой
/Пользователи/../AppDelegate.swift: 25: 11: Objective-C метод 'application: openURL: sourceApplication: annotation: приложение, предоставляемое приложением метода (: openURL: sourceApplication: annotation:), конфликтующее с необязательным требованием метода приложения (: openURL: sourceApplication: annotation:)' в протоколе 'UIApplicationDelegate'
Я понимаю, что, скорее всего, мне хотелось бы, чтобы вы каким-то образом объединили эти две функции в одну. Я не понимаю, почему этот код внезапно прекратил работу в 6.3, несмотря на то, что он работал в 6.2.
Ответы
Ответ 1
Я точно не знаю, почему компилятор бросает ошибку, однако я вижу разницу в версии Swift по умолчанию этих же методов. Возможно, вы могли бы заменить объявление функции теми, которые были созданы с помощью обычного проекта Swift:
1
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
2
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
Я бы порекомендовал заменить ваши объявления методов на приведенное выше, чтобы узнать, компилируется ли он сейчас.
EDIT 1 (9/21/2015): Я подтвердил, что они теперь обновлены для публичного выпуска Xcode 7. Они удалили необязательный (annotation: AnyObject?
) и сделали его (annotation: AnyObject
) в объявлении № 2.
Ответ 2
Тип параметра launchOptions функции didFinishLaunchingWithOptions был изменен в XCode 6.3:
"launchOptions: NSDictionary?" стал "launchOptions: [NSObject: AnyObject]?"
Просто измените заголовок функции, чтобы он соответствовал следующему:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
Ответ 3
Вы также должны убедиться, что используете правильный тип. Используйте Строка вместо NSString.
Ответ 4
Попробуйте снова переопределить этот метод из пополнения Xcode. Работал для меня.
Ответ 5
startOptions были изменены; попробуйте изменить "launchOptions: NSDictionary"? на "launchOptions: [NSObject: AnyObject]?"
Надеюсь, это поможет!