Ios - @available здесь не защищает доступность; используйте вместо этого if (@available)

Я использую код ниже, но получаю предупреждение,

bool versionSupports = (@available(iOS 10, *));

@available does not guard availability here; use if (@available) instead

Есть решение, в котором я могу использовать

if (@available(iOS 10, *)){
//compile
}else{
//fallback
}

Мне было любопытно, почему вывод помещается внутри условия if (), но не помещается в логическую переменную?

Что ты здесь делаешь?

rmaddy 10.09.2018 08:10

увидеть это один раз может вам помочь: stackoverflow.com/questions/46965347/…

Anbu.Karthik 10.09.2018 08:12
0
2
3 392
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это говорит,

@available may only be used as condition of an 'if', 'guard' or 'while' statement

поэтому вы можете напрямую использовать это в операторах if для проверки доступности вместо того, чтобы использовать его в переменной.

if (@available(iOS 10, *)) {
  // PUT YOUR CODE HERE
} else {
}

В Swift 4.1

if #available(iOS 10.0, *) {

} else {

}

Я знаю, что это возможно. Но я хочу знать, почему выход может быть помещен в блок if () как условие, но не помещен в логическую переменную?

Sazzad Hissain Khan 10.09.2018 09:35

@available(iOS 10, *) не является экспрессией BOOL. Он не возвращает сведения о том, выполняется ли код в этой версии iOS или нет.

Он должен быть в форме:

if (@available(iOS 10, *)) {
    // Code that requires iOS 10 or later
} else {
    // Code for iOS 9 or earlier
}

Если вам нужна переменная, которая указывает, работает ли текущее устройство под управлением iOS 10 или более поздней версии, вы можете сделать что-то вроде:

BOOL versionSupports = [UIDevice currentDevice].systemVersion.floatValue >= 10;

Вы также можете найти Objective-C @ доступная охрана И добавлено больше условий полезным в зависимости от ваших потребностей.

Обход может быть:

bool goodIos = false;
if(@available(iOS 11, *)) goodIos = true;
....

bool magic = false;
if(magicResult && goodIos)
    // TODO: job

Другие вопросы по теме