У меня есть интерфейс Go
type GetResponse interface { OnResult(json string) }
Я должен подписаться на это событие OnResult от ObjC, используя этот интерфейс.
func Subscribe( response GetResponse){ response.OnResult("some json") }
Привязка ObjC дает мне соответствующий протокол и базовыйкласс
@interface GetResponse : NSObject <goSeqRefInterface, GetResponse> {
}
@property(strong, readonly) id _ref;
- (instancetype)initWithRef:(id)ref;
- (void)onResult:(NSString*)json;
@end
Итак, мне нужно получить этот JSON в моем окружении ObjC.Как я могу это сделать?
- Подклассификация Если я создаю подкласс этого GetResponse или просто использую его как есть и передаю подпрограмму Subscribe, она вылетает 'go_seq_go_to_refnum на target-cобъекты недопустимы '
Категория Если я создаю структуру на стороне Go с поддержкой протокола, я не могу создать ее подкласс, но, по крайней мере, это не приводит к сбоям:
type GetResponseStruct struct{}
func (GetResponseStruct) OnResult(json string){log.Info("GO RESULT")}
func CreateGetResponse() *GetResponseStruct{ return &GetResponseStruct{}}
У меня есть твердый объект без очевидного способа подключения моего обратного вызова.Если я создаю категорию и переопределяю подпрограмму onResult, она не вызывается.Просто потому, что переопределение существующих методов класса не определяет поведение в соответствии с AppleDoc.Каждый раз, когда OnResult вызывается из Go, запускается реализация по умолчанию, и появляется «GO RESULT».
Swizzling Я пытался использовать категорию и Swizzle (замените реализацию метода на мою, переименованнуюметод), но это работает, только если я вызываю onResult из ObjC env.
Любой способ решить мою проблему?Или я просто красный док не очень точно?Пожалуйста, помогите мне