其实这应该是属于自己操作问题,今天在用 gomobile 需要传一个实现接口的回调时,居然直接就崩了。

然后抛出了如下异常

go_seq_go_to_refnum on objective-c objects is not permitted

通过 Github 找了一些资料后发现原来是 gomobile 会将 Golang 的 interface 生成为 @protocol IOSHelper 和 @interface IOSHelper 两个声明,我报错时写的实现类如下

class IOSHelperObj : IOSHelper {
}

这样写的话,Golang 那边一调用就崩了。在 Swift 里正确的写法应该是

class IOSHelperObj : NSObject, IOSHelperProtocol {
}

这才是实现一个接口的正确操作。今天又是踩坑的一天 ?‍?️

参考链接:

https://github.com/golang/go/issues/20254

https://groups.google.com/g/golang-nuts/c/znKQiTpzPDU?pli=1

https://github.com/golang/go/issues/35003