Решение для проверки версии iOS в Swift
switch (UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch)) {
case .OrderedAscending:
println("iOS < 8.0")
case .OrderedSame, .OrderedDescending:
println("iOS >= 8.0")
}
Con этого решения: это просто плохая практика, чтобы проверять номера версий ОС, в зависимости от того, как вы это делаете. Поэтому никогда не следует жестко привязывать кодовые зависимости, всегда проверяйте возможности, возможности или существование класса. Учти это; Apple может выпускать обратно совместимую версию класса, если они это сделали, то код, который вы предлагаете, никогда не будет использовать его, поскольку ваша логика ищет номер версии ОС и НЕ существование класса.
Решение для проверки существования класса в Swift
if (objc_getClass("UIAlertController") == nil) {
// iOS 7
} else {
// iOS 8+
}
Не используйте if (NSClassFromString("UIAlertController") == nil)
, потому что он корректно работает на симуляторе iOS, используя iOS 7.1 и 8.2, но если вы протестируете на реальном устройстве с использованием iOS 7.1, вы, к сожалению, заметите, что никогда не будете проходить через часть фрагмента кода.
удвойтесь + международные возвраты дважды, так дважды = дважды +, интервал законен, см. JLS 5.1.2 Расширяющихся Примитивных Преобразования, с другой стороны, интервал = дважды +, интервал "Сужает Примитивное Преобразование" и требует явного броска
интервал = интервал + дважды по существу
интервал = дважды + дважды
, и Вы не можете сделать этого без кастинга...
интервал + = удваивает силы результат до интервала, в то время как другой требует кастинга.
Так = (интервал) (+ b);
должен скомпилировать.
Редактирование: согласно просьбе в комментариях... вот ссылка на большее количество чтения (не самое легкое чтение, но самая корректная информация): http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
В Java + = оператор имеет неявный бросок к левому типу. Это идет для всех составленных операторов.