2017-01-25 4 views
0

Кто-нибудь знает, если это возможно, используя gomobile bind, чтобы реализовать какое-то поведение делегата при экспорте в iOS?Gomobile bind delegate/callback поведение

У меня есть библиотека go, которая обрабатывает сетевые запросы для приложения iOS, и мне нужно, чтобы это было сделано асинхронно, чтобы оно не зависало.

Решения должны были либо отправить блок завершения objc (который, я думаю, не будет работать, поскольку я не нашел способа отправить OBJC-код обратно в функцию go) или реализовать какой-то делегат, чтобы приложение может знать, когда запрос будет завершен. Я пробовал все, что мог придумать ... Любые идеи? Благодаря!

ответ

0

Оказывается, это возможно!

Вот 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)) 
     }() 
    } 

который реализуется следующим образом в 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]; 
} 
Смежные вопросы