Совместимость Swift и Objc - доступность не работает только в objc

Ваш код неверен. Нет точки разбора даты и сохранить ее как объект Date.

Вы можете отформатировать объект даты календаря, когда хотите отобразить его, и сохранить его как строку.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
1
задан Vive 15 January 2019 в 17:03
поделиться

1 ответ

Objective-C имеет __attribute__((availability)) дольше, чем он имел @available. Чтобы заставить это работать, компилятор Objective C слабо связывает символы, которые не доступны в цели развертывания. Это означает, что компиляция всегда завершается успешно, а запуск вашего приложения успешен, но символ будет НЕДЕЙСТВИТЕЛЕН во время выполнения, если он недоступен.

В зависимости от того, что это такое, вы получите более или менее изящную деградацию, когда попытаетесь ее использовать:

  • вызов слабой связанной функции, которая отсутствует, приведет к сбою
  • чтение или запись в глобальную переменную, которая отсутствует, может привести к сбою
  • с использованием отсутствующего класса будет запретом, и все методы будут возвращать ноль
[ 1116] Старый способ проверить, найден ли символ во время выполнения, состоит в том, чтобы просто сравнить его с NULL:

NS_AVAILABLE_MAC(...) @interface Foo @end
int bar NS_AVAILABLE_MAC(...);
int baz(int frob) NS_AVAILABLE_MAC(...);

if ([Foo class]) { /* Foo is available */ }
if (&bar) { /* bar is available */ }
if (&baz) { /* baz is available */ }

В вашем случае:

Reader *tmp = [[Reader alloc] init];

tmp будет [ 115], потому что это будет то же самое, что и [[nil alloc] init].

Директива @available была добавлена ​​относительно недавно в Objective-C. Теперь можно использовать @available в Objective-C так же, как вы используете #available в Swift. Однако, чтобы сохранить обратную совместимость, возможно, никогда не будет ошибкой во время компиляции (при уровнях ошибок по умолчанию) пытаться использовать символ, который может быть недоступен для цели развертывания в Objective-C.

0
ответ дан zneak 15 January 2019 в 17:03
поделиться