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