Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Study Swift

3,039 views

Published on

仲間内で Swift の勉強しよう、ってので作った資料
折角なので共有します。

時間がなく適当につくったものなので、
理解不足等あると思いますので、ご了承ください。

  • Be the first to comment

Study Swift

  1. 1. Study Swift 2014/7/9 Urushihara Akihiro @U_Akihir0
  2. 2. IntroductionIntroduction ● Swift のここがすごい! ● AltJS のような次世代的な言語設計 ● LLVM-Backend による高速な動作の実現 ● 過去の資産 Objective-C との連携 ● ARC GC による高速なメモリ管理
  3. 3. 目次目次 ● Swift のセットアップ ● Swift の基本的な構文 ● Swift の発展的な構文
  4. 4. 目次目次 ● Swift のセットアップ ● Swift の基本的な構文 ● Swift の発展的な構文
  5. 5. SwiftSwift のセットアップのセットアップ ● XCode6 beta 以降のインストール ● XCode のダウンロードには課金アカウントが必要 – 年間 9000 円ぐらいの iOS or Mac App の開発契約 それだけ iOS 開発環境もそれだけでセットアップ完了 – 某 Android に比べれば 100 倍も簡単!
  6. 6. SwiftSwift プロジェクトの作成プロジェクトの作成 ● 新しいプロジェクトを作る際に言語欄で 「Swift」を選択すると Swift 向けの各種 テンプレートプロジェクトが作成される
  7. 7. SwiftSwift プロジェクトの作成プロジェクトの作成 ● 新しいプロジェクトを作る際に言語欄で 「Swift」を選択すると Swift 向けの各種 テンプレートプロジェクトが作成される
  8. 8. SwiftSwift の基本的なお約束の基本的なお約束 ● 変数に対して型宣言はしません ● 変数の型は自動的に推論されます – バリアント型ではないので注意 ● 一般的なオブジェクト指向の言語です ● 記述的な部分では、AltJS に近い言語です – CofeeScript とかに近いという感じ(?) ● Class、Struct、Enum があります ● しかし、どれでも同じようなことができる…
  9. 9. 目次目次 ● Swift のセットアップ ● Swift の基本的な構文 ● Swift の発展的な構文
  10. 10. !書く前の注意!!書く前の注意! ● プログラム中に日本語がある場合に補完が効きま せん(コメントも含まれます)(XCode beta6-2) ● コピーライトに「年」とか入ってると死ぬ
  11. 11. 変数の型変数の型 (C(C言語との対応言語との対応)) ● 基本的に大文字になると考えればいい ● int → Int ● float → Float ● double → Double ● 文字列等 ● String (NSString in ObjC) ● Array, Dictionary ● AnyObject (id in ObjC)
  12. 12. 変数の宣言変数の宣言 ● let か var を付けて宣言 (基本 var でいい) ● let は Java でいう Final に近い – 一度代入されると変更できない ● 型を明示することも可能
  13. 13. クラスの宣言クラスの宣言 ● class 以下でクラスを宣言 ● 継承とプロトコル (インターフェース) は : 以下にカンマ区切りで名前を羅列する ● フィールドの宣言は同じ
  14. 14. init deinitinit deinit ● イニシャライザとファイナライザを記述できる ● !イニシャライザの段階でフィールド変数を 全部初期化しなければならない! – 例外はあるが後述する
  15. 15. initinit のあれこれのあれこれ ● 継承した場合、super.init() を呼ばないといけない ● しかし、super.init() の前に必ず継承して追加した フィールド変数を全て初期化しないといけない ● super.init() を呼ぶ前に継承元のフィールド変数を 読み込むような処理を書いてはいけない
  16. 16. initinit のあれこれのあれこれ ● 継承した場合、super.init() を呼ばないといけない ● しかし、super.init() の前に必ず継承して追加した フィールド変数を全て初期化しないといけない ● super.init() を呼ぶ前に継承元のフィールド変数を 読み込むような処理を書いてはいけない
  17. 17. 関数宣言関数宣言 ● 関数宣言は以下のようなフォーマットで行う ● func 関数名 (引数名1:引数型1, …) -> 返り値の型 { ● 無名関数はこのようには宣言しないので注意 – Blocks という項目にて後述
  18. 18. オーバーライドオーバーライド ● 関数のオーバーライドは明示的に宣言する ● func の前に override と記述
  19. 19. 静的メソッド静的メソッド ● func の前に class を付ける ● 静的フィールド変数には対応していない – 構造体、列挙体のみ用いることができる
  20. 20. 表示関数表示関数 ● Java っぽく print, println みたいな関数がある ● 文字列の中に数値を埋め込む方法もある
  21. 21. 文字列文字列 ● 文字列は直感的に分かりやすくなった ● NSString の基本的な操作構文にも対応してる ● + で文字列結合できるよ、やったね! – Objective-C では糞長い関数を書く必要がある
  22. 22. 数値数値 ● 数値は自動でオブジェクトにボクシングされる ● Objective-C 的には NSNumber に勝手に変化する – 一見、生の数値に対してメソッドコールが可能
  23. 23. キャストキャスト ● Swift では暗黙の型変換は行われない ● 1 + 1.1 はエラーになる (型が違うため) – 演算子オーバーロードで解決はできる ● 変数の型キャストは以下のように行う ● 型名で覆う キャスト範囲が分かりやすい
  24. 24. 演算子オーバーロード演算子オーバーロード ● 型の演算を上書きすることもできる ● @infix を付けて関数を書き換える
  25. 25. タプルタプル ● タプルを用いることができる ● 簡易的な構造体だと思えば大体あってる (Float, Float, Float) のタプルは struct fvec3{ float f1, f2, f3; } のようなもの
  26. 26. Optional TypeOptional Type ● 個人的にややっこしい部分なので強調 ● Swift では安全性の為に、基本的に変数に null の代入を許容していない → null の表現はどのようにしたらいいのか? → Optional Type を用いる – null を許容した型と捉えればいい
  27. 27. ? or !? or ! ● 変数宣言の際に型を明示し、型名の後に ? or ! をつけると Optional Type になる ● null の代入が許容される
  28. 28. nullnull に対する参照に対する参照 (1)(1) ● 基本的に null に対する参照は null が返る ● ランタイムエラーにはならず、処理が続行する ● Swift では明示的に記載しなければならない Null 要素の場合は結果は Null になる関数呼び出し
  29. 29. nullnull に対する参照に対する参照 (2)(2) ● null に対する参照が行われた場合、ランタイムエ ラーにしたいという場合も明示的に書く ● ? ではなく ! にする Null 要素の場合ランタイムエラーになる関数呼び出し
  30. 30. Optional TypeOptional Type の代入の代入 ● 通常の変数に Optional Type の変数を代入したい ● null の場合ランタイムエラーになる ● 単純に代入文を書くと構文エラーになる – 代入後の変数名に ! マークを付ける
  31. 31. 基本的にランタイムエラーに基本的にランタイムエラーに ● Optional Type だが、基本的にnull参照はランタイ ムエラーにして欲しいし、! とか書きたくない場合 ● 要するに今まで通りの変数をお望みの場合 – 変数宣言時に型の後に ? ではなく ! で宣言 ● ! の記載を省略することができる (個人的には非推奨)
  32. 32. 配列配列 ● 配列の宣言は形名の後に[]をつける or Array<型名> と宣言する ● 自動ボクシングで数値もらくらく格納!! 要素ゼロの配列で初期化 2要素の配列 同じ意味
  33. 33. 配列配列 :: 謎仕様謎仕様 ● 配列の Optional Type が使いにくい ● 何故かメンバが見付からなくなる ● 何故かインデックスアクセスができなくなる – [] アクセスも演算子オーバーロードみたいなもの ● 一度 ! で普通の配列型に代入してから用いる
  34. 34. 辞書辞書 ● 配列とほぼ同様に辞書も用いることができる ● しかし、型に対して注意する必要がある ● 謎バグは辞書でも発生する 格納されている変数の型は Optional Type
  35. 35. 辞書の型辞書の型 ● 辞書の型は初期化時に決定する ● 厳し目に設定されるので、よくエラーになる ● 明示的に型を表現することも可能
  36. 36. forfor 文文 ● for 文がリッチになっている ● 列挙構文も勿論対応してるし、 タプルだったら中身まで分解できる
  37. 37. 型のエイリアス型のエイリアス ● 型には別名を付けて参照しやすくできる ● タプルとか辞書みたいに型が長くなるのには有効 – 構造体作れっていう突っ込みは無しで
  38. 38. 目次目次 ● Swift のセットアップ ● Swift の基本的な構文 ● SwiftSwift の発展的な構文の発展的な構文
  39. 39. 列挙型列挙型 ● Swift において列挙型は以下のように定義する ● case で各列挙要素を作る 複数一気に定義できる
  40. 40. 列挙型の型推論列挙型の型推論 ● 列挙型の比較など、型推論が有効なケースについ て、列挙型の名前の記述が省略できる
  41. 41. 列挙型内の関数列挙型内の関数 ● 列挙型内に関数を定義することができる Self によって呼出されている 列挙体が取得できる
  42. 42. 型に紐付いた列挙体型に紐付いた列挙体 ● 列挙体に型を紐付けることができる 紐付ける型、文字列も対応 ここを基準に値を振ってくれる
  43. 43. 列挙型を用いた列挙型を用いた SwitchSwitch ● Switch 構文で列挙型が使用できる
  44. 44. 値を紐付いた列挙体値を紐付いた列挙体 ● Enum の要素に値を紐付けることが可能 どの型の値を何個紐付けるか Switch 文の中で取り出せる 他の文中では不明
  45. 45. 型情報の確認型情報の確認 ● AnyObject (Any) の型が何であるかを確認 ● as を用いることで確認が可能
  46. 46. プロトコルプロトコル ((インターフェースインターフェース)) ● 実装しなければならない関数を定義する ● Java でいうインターフェース この関数を実装しなければいけない
  47. 47. Getter, SetterGetter, Setter ● Getter, Setter の簡単な作成方法が用意されている ● フィールド自体が無い場合もあるので注意 X に依存した値で フィールドとして直接値を 持つように振舞っているだけ
  48. 48. didset willsetdidset willset ● フィールド変数がセットされる前と後に動作を挟 む事ができる仕組みが用意されている
  49. 49. 構造体構造体 ● 構造体は以下のように定義できます ● 勿論関数も定義できるよ!!
  50. 50. 構造体のプロトコル構造体のプロトコル ● 構造体でもプロトコルを指定できる ● 指定された関数の実装が必須
  51. 51. 構造体構造体 : mutating: mutating ● 構造体の内部に宣言された関数内で、メンバを書 き換える場合は関数に mutating の識別子をつける ● 高速化のためだと考えられる
  52. 52. letlet 文の値文の値 ● Let 文は代入に成功した時に 1 を返す (?) ● Optional Chaining – それが実行できた時のみ動作
  53. 53. 第一級関数第一級関数 ● 関数が第一級オブジェクト ● Objective-C の Blocks の役割もこれ
  54. 54. Objective-CObjective-C との連携との連携 ● Swift プロジェクト内で Objective-C ファイルを作 成すると、Bridging-Header が作成される ● Swift で扱うファイルをインクルード
  55. 55. Objective-CObjective-C との連携との連携 ● Swift のプログラムを Objective-C で用いる場合 ● プロジェクト名-Swift.h をインクルード
  56. 56. 変換命名規則変換命名規則 ● Objective-C と Swift の関数変換 ● Objective-C ● Swift
  57. 57. 以上 ありがとうございました!

×