任何人都知道在导出到 iOS 时是否有可能使用 gomobile 绑定来实现某种委托行为?
即我有一个处理iOS应用程序网络请求的go库,我需要它异步完成,这样它就不会挂起应用程序。
解决方案是发送一个 objc 完成块(我认为这不会起作用,因为我找不到将 objc 代码发送回 go 函数的方法)或实现某种委托,以便应用程序可以知道何时请求已完成。我已经尝试了我能想到的一切......有什么想法吗?谢谢!
事实证明这是可能的!
这是 Go 代码:
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))
}()
}
在 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];
}