dongtao5104 2017-01-25 16:08
浏览 235
已采纳

Gomobile绑定委托/回调行为

Anyone know if it is possible, using gomobile bind, to implement some sort of delegate behaviour when exporting to iOS?

i.e. i have a go library that handles network requests for an iOS app, and i need it to be done asynchronously so that it doesn't hang the app.

Solutions would be to either send a objc completion block (which i don't think will work, since i have found no way to send objc code back into the go function) or implement some sort of delegate so that the app can know when the request has finished. I have tried everything I could think of... Any ideas? Thanks!

  • 写回答

1条回答 默认 最新

  • dsdsds12222 2017-02-01 09:28
    关注

    Turns out it is possible!

    Here is the Go Code:

    type NetworkingClient struct {}
    
    func CreateNetworkingClient() *NetworkingClient {
        return &NetworkingClient {}
    }
    
    type Callback interface {
        SendResult(json string)
    }
    
    func (client NetworkingClient) RequestJson (countryCode string, callback Callback) {
        go func () {
        safeCountryCode := url.QueryEscape(countryCode)
        url := fmt.Sprintf("someApi/%s", safeCountryCode)
    
        req, err := http.NewRequest("GET", url, nil)
        if err != nil {
            //Handle error
        }
    
        httpClient := &http.Client{}
    
        resp, err := httpClient.Do(req)
        if err != nil {
            //Handle error
        }
    
        defer resp.Body.Close()
          b, err := ioutil.ReadAll(resp.Body)
          callback.SendResult(string(b))
            }()
      }
    

    Which is implemented as follow in Objetive-C:

    - (void)start {
    
        ...
    
        EndpointNetworkingClient* client = EndpointCreateNetworkingClient();
        [client requestJson:countryCode callback:self];
    }
    
    //Receives the json string from Go.
    - (void)sendResult:(NSString*)json{
        NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
        id jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        [self handleResponse:jsonDictionary];
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)