首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gomobile: ObjC的绑定回调

gomobile: ObjC的绑定回调
EN

Stack Overflow用户
提问于 2018-06-12 11:07:03
回答 1查看 814关注 0票数 2

我有一个Go接口

代码语言:javascript
复制
type GetResponse interface { OnResult(json string) }

我必须使用这个接口从OnResult订阅事件ObjC。

代码语言:javascript
复制
func Subscribe( response GetResponse){ response.OnResult("some json") }

ObjC绑定给我一个相应的协议和一个基本类。

代码语言:javascript
复制
@interface GetResponse : NSObject <goSeqRefInterface, GetResponse> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)onResult:(NSString*)json;
@end

因此,我需要在我的ObjC env中获得这个json。我怎么能这么做?

  1. 子类如果我子类这个GetResponse,或者只是按原样使用它并传递给订阅例程,则不允许在objects对象上崩溃'go_seq_go_to_refnum‘
  2. 如果我创建的结构与协议支持并排,我不能对其进行子类化,但至少它不是崩溃: 键入GetResponseStruct struct{} func (GetResponseStruct) OnResult(json string){log.Info("GO RESULT")} func CreateGetResponse() *GetResponseStruct{ func&GetResponseStruct{} 我有一个坚实的对象,没有明显的方式连接我的回调。如果我创建一个类别并重写onResult例程,则不会调用它。仅仅因为重写类的现有方法并不是根据AppleDoc确定的行为。每当OnResult从Go调用时,默认实现都会调用并出现"GO结果“。
  3. Swizzling我尝试使用类别和swizzle (用我重命名的方法替换方法的实现),但是只有当我从ObjC env调用onResult时,它才能工作。

有办法解决我的问题吗?还是我只是对医生进行了不太准确的检查?请帮帮我

EN

回答 1

Stack Overflow用户

发布于 2019-10-19 06:39:52

我今天遇到了一个类似的问题。我认为这是gomobile的一个bug,但这毕竟是我对斯威夫特/objc的误解。https://github.com/golang/go/issues/35003

该bug的TLDR是您必须子类协议,而不是接口。如果您使用的是GetResponseProtocol,那么您可以子类化

代码语言:javascript
复制
class MyResponse: GetResponseProtocol

如果在objc中,那么您可能希望直接实现GetResponse协议,而不是对接口进行子类化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50815664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档