Я пытаюсь конвертировать код из Objective-C в Swift.Преобразовать все это будет невозможно, поскольку проект использует C ++ и, следовательно, Objective-C ++, но, по крайней мере, используемые протоколы должны быть написаны на Swift.
Поэтому при попытке преобразовать один с помощью блокакак свойство я наткнулся на проблемы.
Мой протокол Objective C:
@protocol ObjcProtocol<NSObject>
@property (nullable, nonatomic, copy, readwrite) dispatch_block_t callback;
@end
Мой протокол Swift:
@objc public protocol SwiftProtocol: NSObjectProtocol {
var callback: ()->() { get set }
}
Попытка установить это свойство вObjective-C Я получаю эту ошибку:
«Обратный вызов свойства» не найден для объекта типа «NSObject *» »
Созданный файл заголовка Swift содержит следующее:
@property (nonatomic, copy) void (^ _Nonnull callback)(void);
Я тоже наткнулся на @convention(block)
.Объявление его непосредственно в var не работает, так как я получаю сообщение об ошибке, утверждая, что его можно использовать только как тип функции.Поэтому я попытался использовать typealias:
public typealias callBackType = (@convention(block) () -> ())
, что снова приводит к тому, что свойство не было найдено.
Что-то еще, что я пробовал, но безуспешно, явно аннотировалосвойство с @objc
.
Установка необязательного типа функции обратного вызова также ничего не изменила.
Кроме того, я попытался создать протокол Objective-C, содержащий обратный вызов, и создать SwiftProtocolзависит от вновь созданного протокола.Тот же результат ...
Чего мне не хватает?