Метод Objective-C конфликтует с дополнительным требованием метода Swift

После обновления Xcode компилятор начал выдавать ошибку в рабочем коде (обе функции находятся в AppDelegate.swift).

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { FBLoginView.self FBProfilePictureView.self return true } 

С ошибкой:

/Users/../AppDelegate.swift:14:11: приложение Objective-C method: didFinishLaunchingWithOptions: приложение, предоставленное приложением method: ( : didFinishLaunchingWithOptions :), конфликтующее с необязательным требованием, приложение ( : 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 } 

с ошибкой

/Users/../AppDelegate.swift:25:11: приложение Objective-C method: openURL: sourceApplication: аннотация: приложение, предоставленное с помощью метода ( : openURL: sourceApplication: annotation 🙂 «конфликтует с необязательным требованием» ( : openURL: sourceApplication: annotation 🙂 'в протоколе' UIApplicationDelegate '

Я понимаю, что, скорее всего, мне хотелось бы, чтобы вы каким-то образом связали эти две функции. Я не понимаю, почему этот код внезапно прекратил работу в 6.3, несмотря на то, что он работал в 6.2.

    Я не совсем уверен, почему компилятор бросает ошибку, однако я вижу разницу в версии 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.

    Тип параметра launchOptions функции didFinishLaunchingWithOptions был изменен в XCode 6.3:

    "launchOptions: NSDictionary?" стал «launchOptions: [NSObject: AnyObject]?»

    Просто измените заголовок функции, чтобы он соответствовал следующему:

     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

    Вы также должны убедиться, что используете правильный тип. Используйте String вместо NSString .

    Попытайтесь переопределить этот метод снова с завершений Xcode. Работал для меня.

    changeOptions были изменены; попробуйте изменить «launchOptions: NSDictionary»? на "launchOptions: [NSObject: AnyObject]?"

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

    Interesting Posts

    Отключение выбора пользователя в UIWebView

    iOS / sqlite – Как распечатать подготовленный sqlite3_stmt для NSLog

    Непрерывные минуты UIDatePicker

    IBOutlet и viewDidUnload под ARC

    Ошибка Неожиданного класса при кодировании / декодировании NSArray с помощью NSSecureCoding

    Как заменить NSUncaughtExceptionHandler на определение в навигаторе точки останова?

    Цвет нижнего колонтитула всегда темнее, чем цвет разделителя UITableView

    Как установить доступность только для аннотаций в режиме просмотра карты?

    Swift – порядок сохраненных значений полностью изменяется в словаре

    UIStackView: изменение ширины изображения UIStackView с помощью раскадровки

    – не запускает уведомления KVO для ключа @ statusBarHidden.

    Создайте автономный вид в раскадровке для использования программно

    Предварительная загрузка текстур комплекта спрайтов

    Как отключить сторонние клавиатуры в Swift?

    CABasicAnimation намного быстрее в 3G, чем на 4 / 4S / ipod4

    Давайте будем гением компьютера.