Swift App Without Storyboard
Swiftのドキュメントを読みながらほむほむと言ってても身に付かないのでやっぱり何か作りつつ、動作確認しつつやっていかないとね!
てことでSwiftでストーリーボードを使わずにアプリを作っていってみます・ω・
(Swiftでアプリではなく、言語自体をさわってみたい場合はplaygroundも用意されています・ω・♪)
ストーリーボードを使わないのは言語の動きを確かめるためです(ストーリーボードをいつもあまり使ってないってのもありますが)
AppDelegateを読む
Emptyでプロジェクトを作成したらAppDelegate.swift
が作成されるので内容をざっとみてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
わおΣ
とりあえずmainはどこいったんだとかいろいろわからない。
main関数
main関数はなくなりましたΣ
けどmain関数を利用するライブラリなどもあるわけで。使おうと思えば使えるみたいです。
- Swiftのプロジェクトでmain.mを使う
に記載されてましたΣ
Objective-Cのコードを使うためのimport
swiftでObjective-Cのコードを使うには明示的にimportしてあげる必要があります。
UIApplicationDelegate
とUIResponder
を利用したいのでAppDelegate
ではUIKit
をimportしてあげます。
1
|
|
こうするとUIKitが使えるようになります。
@UIApplicationMain
Objective-Cではmain関数でUIApplicationMainにAppDelegateを渡していましたが、Swiftでは@UIApplicationMain
をAppDelegateクラスのすぐ上に記述することで、同様の内容になるようです。
ということで、今まであったmain関数の中の処理の代わりに、@UIApplicationMain
をAppDelegateクラスのswiftファイルに記述します。
クラス
クラスの書き方は
1 2 |
|
こんな形になるみたいです。
:
のすぐ後ろの継承したいクラス名、続けてプロトコル名を記載していきます。
もちろんクラスは複数継承することはできないので、親クラスは1つしか記載することができません。
複数のクラスを記述した時は
1
|
|
こんな感じで怒られましたorz
プロパティ宣言
プロパティの宣言はクラスの一番上に記載します。
1
|
|
UIWindow?
の最後にある?
はnil
を許容するかどうかです。
初期値はnil
なので、宣言時に初期値を代入しない場合、?
をつけておかないとエラーになってしまいます。
これとは別に、nil
を入れたくない変数の場合は!
を記載しておくと、変数にnil
を代入しようとするとエラーになるようになっています。
※このエラーが起きるのは実行時です。
関数
1 2 |
|
こんな感じで記載します。
Objective-C
1
|
|
Swift
1
|
|
Windowの初期化処理
記載する内容は同じですが、ここもSwiftの記述に書き換えます。
Objective-C
1
|
|
Swift
1
|
|
Swiftだと初期化時にalloc
をわざわざ呼び出す必要がなくなりました。
今までのものをSwiftに書き換える場合、初期化を表すinit
とinitWith
は切り取り、その後ろの続く部分の先頭を小文字にして()
の一番前の部分に記載します。
initWithFrame:
=> (frame: )
Objective-C
1
|
|
Swift
1
|
|
ほかのものも同様にこのような形に変換されています。
ちなみに.Grouped
の.
はenumであることを表しています。
1
|
|
このself.window!
にある!
はやはりnil
を許容しない意味で、self.window.backgroundColor
に値を代入する際、self.window
がnil
であってはいけないため!
をつけておきます。
ViewControllerをセットする
今回はよくある形のNavigationControllerに独自のViewControllerを持たせる形にしてみます。
SwiftViewController
1 2 3 4 5 6 7 8 9 10 11 |
|
ViewControllerはいつも通り初期化メソッドとviewDidLoad
を作っておきます。
わかりやすいように背景色を赤にしてみました。
AppDelegateで初期化
1
|
|
navigationController
をプロパティに持たせて、SwiftViewController
と一緒に初期化します。
1 2 3 |
|
これで第一段階完成!
無事コントローラーを1つセットして、基本となる形を作り出すことができました。