Подтвердить что ты не робот

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.

4b9b3361

Ответ 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]?"

Надеюсь, это поможет!