2013/12/06

最近はもっぱらXamarinを使っている。

Xamarinといえば。
iOSやAndroidのアプリをC#で作れる、というものです。

どうやら理屈的には「C#のコードをネイティブに変換し、それをコンパイルする」ということで。
なにやらApple Storeの申請も通るらしいです。
恐ろしいですね。

けど、本当に恐ろしいのはコードの手数の少なさとネットワーク関連のバックグラウンドのやりやすさです。
なんと、最近のバージョンはasync~awaitが使えてしまいます。
そのおかげでコーディングが楽で楽で。

iOS用のコードを書いてみると。
たとえばこうやったりするんです。

public class ApiTest {
    public delegate void ApiCallBackEventArgs(object sender, ApiResult result);
    public event ApiCallBackEventArgs ApiCallback;
    public async void CallApi(string uri) {
        try {
            HttpClient client = new HttpClient();
            HttpResponseMessage resp = await client.GetAsync (uri);
            DataContractJsonserializer serializer = new DataContractJsonSerializer(typeof(ApiResult));
            if (ApiCallback != null) {
                ApiCallback(this, (ApiResult) serializer.ReadObject(await resp.Content.ReadAsStreamAsync()));
            }
        } catch(Exception ex) {
            Debug.WriteLine(ex);
        }
    }
    [DataContract]
    public class ApiResult {
        [DataMember(Name = “message”)]
        public string Message { get; set; }
    }
}

ApiTest api = new ApiTest();
api.ApiCallback += delegate (sender, result) => {
    this.BeginInvokeOnMainThread (() => {
        message.Text = result.Message;
    });
};
api.CallApi(api_url);

すみません、今ざっと適当に入力しただけなので、エラーとかあると思いますが。


とにもかくにも。
こんな感じで。
どこのWindows Storeアプリなんだと。


極端な話、データを表示するためにメインスレッドへ処理をディスパッチする部分しかiOS/Android/WindowsStoreでの違いはないです。
これをうまく使えば、ネットワークとModelの部分は完全に共通化できそうな勢いです。

0 件のコメント: