У меня есть объективная библиотека c, которую можно использовать в Swift с помощью заголовка моста.
Один из моих общедоступных методов помечен как возвращающий nonnull
, но на самом деле в некоторых случаях он может возвращать nil.
Я ожидал, что код Swift, вызывающий этот метод, вылетит из-за «развертки необязательного значения nil», но на самом деле это не так.
Цель-C:
- (nonnull UserService *)users
{
if (!_users && [self checkStarted]) {
_users = [[UserService alloc] init];
}
return _users;
}
-(BOOL) checkStarted
{
return NO;
}
Быстрый заголовок:
Заголовок генерации выглядит следующим образом:
func users() -> UserService
Быстрое использование:
let userService = sdk.users()
Когда я po
возвращаю значение, я получаю этот результат
po userService
<uninitialized>
Как так?
userService
может быть нулевым, просто напишитеlet userService : UserService? = sdk.users()
. Теперь, если этоnil
, вы можете узнать это связно. - person matt   schedule 17.10.2016nil
, почему он помечен какnonnull
вместоnullable
? - person rmaddy   schedule 17.10.2016print(userService)
или даже обращались к одному из его свойств? - person Martin R   schedule 17.10.2016