2016-08-09 2 views
38

поэтому я недавно просто обновился до Xcode 8, и я просто получил эту ошибку для следующего кода.preferredStatusBarStyle удален в Swift 3?

Ошибка в том, что метод не отменяет какой-либо метод из его суперклассов.

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.lightContent 
} 

enter image description here

Я был бы очень признателен помощь, спасибо!

+0

Просто удалите ключевое слово 'override' из забавы ction –

+0

Я получаю эту ошибку, когда я это делаю: метод 'preferredStatusBarStyle()' с Objective-C selector 'preferredStatusBarStyle' конфликтует с getter для 'preferredStatusBarStyle' из суперкласса 'UIViewController' с тем же селектором Objective-C –

+0

Вы используете в ' Класс UIViewController'? У меня нет никаких ошибок. –

ответ

121

В iOS 10, preferredStatusBarStyle это свойство, а не способ. Таким образом, вместо того, перекрывая его с func декларации, как вы сделали, вы переопределить геттер с var декларации:

override var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent 
} 

сообщением об ошибке Свифта компилятора здесь, вероятно, может быть лучше - так как он, кажется, знает свое переопределение FUNC должен покрывать имущество, он, вероятно, может предложить это как исправление. Я бы порекомендовал filing a bug to Swift open source.

+0

Еще одна причина, чтобы не любить Свифт. Я единственный? – erkanyildiz

+0

Я получаю следующую ошибку: «UIStatusBarStyle» недоступен. Есть идеи? (tvOS) – rottenoats

+1

@rugdealer: 'UIStatusBarStyle' доступен только для iOS 8.1+ в соответствии с документацией. –

4

The iOS 10.0 API Diffs показывает, что метод UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle был удален и что UIViewController.preferredStatusBarStyle имущество было добавлен.


Подобным же образом, с Xcode 8, вы можете правой кнопкой мыши на любомUIViewController в коде, выберите Перейти к определению, а затем выполнить поиск по preferredStatusBarStyle. Вы обнаружите, что preferredStatusBarStyle теперь имеет следующее заявление:

@available(iOS 7.0, *) 
open var preferredStatusBarStyle: UIStatusBarStyle { get } 

Таким образом, в следующем фрагменте кода показано, как переопределить preferredStatusBarStyle с Xcode 8/Swift 3:

override var preferredStatusBarStyle: UIStatusBarStyle { 
    get { 
     return .lightContent 
    } 
} 

Или, в гораздо более короткий и предпочтительный стиль:

override var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent 
} 
+0

Я получаю следующую ошибку: «UIStatusBarStyle» недоступен. Есть идеи? (tvOS) – rottenoats

+0

Очень полезное объяснение. Я буду использовать другие вещи. Спасибо. – Adrian