var x = 1; // x は int!var obj = new Hoge(); // obj は Hoge オブジェクト
ラムダ式
// 一番簡潔な記法(型推論)x => x > 0!// 型や return を省略しない記法(int x) => { return x > 0; }!// 通常の関数で書いた場合bool Hoge(int x) { return x > 0; }
LINQ !(クエリ)
var list1 = list.Where(x => x > 0);!var list2 = list.Where(x => x > 0) .Select(x => x.Name);
async / await !(非同期処理)
async void Hoge(){ Work1(); // 普通に呼ばれる var result = await WorkAsync(); // 別スレッド Work2(); // WorkAsync の後で呼ばれる}
Xamarin Studio
開発環境• Xamarin Studio(以前は MonoDevelop)
• Storyboard の編集も Xamarin Studio で可能
• xib の編集は Xcode を起動して連動
Storyboard
AutoLayout
NuGet
• NuGet で各種ライブラリを導入できる
• 後述の MvvmCross も NuGet で
MVVM とは
MVVM
• Model - View - ViewModel
ロジックとビューの分離• ロジック部分はプラットフォーム非依存
ビューはプラットフォームごと• 各プラットフォームの世界観を大事にする
MVVM を使うには• C# / .NET 文化圏でつちかわれてきた
• このため、Xamarin と MVVM は相性がよい
• 余談:Objective-C or Swift でやるなら
ReactiveCocoa を使うのが良い
MvvmCross
MvvmCross
• Xamarin で MVVM 設計をサポートするライブラリの1つ
• https://github.com/MvvmCross/MvvmCross
プロジェクト構成• Core
• Touch (iOS)
• Droid (Android)
プロジェクト構成• Core Project
• プラットフォーム固有の機能は使えない
• Touch / Droid Project
• プラットフォーム固有の機能が使える
• でも、View にはロジックを書かない
プラットフォーム依存の機能• プラットフォーム依存の機能を使いたい
• たとえばカメラとか
• プラグインを作ることで解決
View の作成• MVVM の View = UIViewController
• View のコードは最小限におさえる
• 画面ロジックは ViewModel
• xib + AutoLayout を活用
• (現状 MvvmCross は Storyboard 非対応)
画面遷移• 画面遷移の論理は ViewModel に記述
• アニメーション処理などは View に記述
• Storyboard の Segue とは相性悪い・・・
バインディング• View と ViewModel のバインディング記述
• これはコードで書くしかない(iOS の場合)
バインディング
var set = this.CreateBindingSet<HogeView, HogeViewModel>();set.Bind(HogeLabel).To(vm => vm.HogeText);set Bind(HogeButton).To(vm => vm.HogeCommand);set.Apply();