Принудительный метод Objective C, возвращающий id и inout NSError, чтобы соединиться с необязательным возвратом
Рассмотрим этот класс Objective-C:
@interface TestAPI : NSObject
-(nullable id)aNullableMethod;
-(nullable id)aNullableMethodWithError:(inout NSError **)error;
@end
я использую TestAPI
как абстрактный базовый класс и хотите наследовать от него в Swift.
Swift соединяет этот код, чтобы он выглядел следующим образом (т.е. меню "Сопутствующие товары" -> интерфейс Swift 4.2):
open class TestAPI : NSObject {
open func aNullableMethod() -> Any?
open func aNullableMethodWithError() throws -> Any
}
Проблема в том, что aNullableMethodWithError()
может вернуться nil
как действительное значение.
Как мне убедить Свифта в том, что aNullableMethodWithError()
возвращается Any?
и не Any
?
Или есть лучший способ написать подпись метода Objective C?
1 ответ
Вам может понадобиться использовать NS_SWIFT_NOTHROW
:
-(nullable id)aNullableMethodWithError:(inout NSError **)error NS_SWIFT_NOTHROW;
Это импортируется в Swift как:
open func aNullableMethodWithError(_ error: NSErrorPointer) -> Any?
Если вы хотите импортировать свой метод как throws
-функция, вам может понадобиться изменить сигнатуру метода в соответствии с соглашением:
- Вернуть
true
или не ноль без ошибок - Вернуть
false
или ноль в случае ошибки
Что-то вроде этого:
-(BOOL)aNullableMethod:(id*)object withError:(inout NSError **)error;
В Свифте:
open func aNullableMethod(_ object: AutoreleasingUnsafeMutablePointer<AnyObject?>!) throws