こんにちは!Swift愛好会&Kotlin愛好会主催の@jollyjoesterです。本書を手に取っていただき、ありがとうございます。
本書はSwiftを愛するメンバーが集まるSwift愛好会とKotlinを愛するメンバーが集まるKotlin愛好会の有志メンバーがネタを持ち寄って作成した技術同人です。言語についての話にとどまらず、Swift/Kotlinに関連の深いプラットフォームやサービスについての話など多岐にわたるネタについて盛り込んでいます。
各章は独立しています。著者紹介でそれぞれの章の概要を紹介しますので、興味を持った章から読み進めてください。楽しんでいただけるととても嬉しいです。
ドーモ!jollyjoesterです。
SwiftUIが正式リリースされて数ヶ月。みなさん入門できていますでしょうか?チュートリアルがとてもしっかりしているのでちゃんと学ぶにはまずそちらをじっくり読み込むことが重要です。
が、まずはさくっと入門したい方向けにここでは「ボタンを押したら表示されているテキストが変わる」という超シンプルなアプリの作り方を紹介します。SwiftUIの雰囲気を掴んでさくっとキャッチアップしていきましょう!
なお、SwiftUIを使うには下記の環境が必要です。古い環境の方はアップデートしてから始めましょう。
まずプロジェクトの作成です。
これまで通り「Create a new Xcode project」からプロジェクトを作っていきましょう。
プロジェクトのテンプレートは「iOS」の「Single View App」を選びます。
適当にプロジェクト名等を設定し、Languageに「Swift」、User Interfaceに「SwiftUI」を選択します。SwiftUIという名前だけあってLanguageが「Objective-C」だとそもそも選択できません。
プロジェクト保存のために適当なディレクトリを選択して、「Create」を押せばプロジェクトの作成完了です。
プロジェクトの構成を見てみましょう。「AppDelegate.swift」「SceneDelegate.swift」「ContentView.swift」などが作成されていますが、「ContentView.swift」が今回の主役です。
「ContentView.swift」を選択すると下記のように左側に「ソースコード」が、右側に「Preview」が表示されます。
ContentView.swiftの中身を見ていきましょう。2つあるstructのうち、ContentView
の方のvar body: some View
の中身にUIをごりごり書いていくことになります。
ソースコード中のText("Hello, World!")
の部分にカーソルを置くと、対応するTextのAtrributes inspector(Xcode画面右側の部分)が開きます。
このAttributes inspectorでTextの属性をいろいろ設定することができます。設定を変えるとすぐPreviewに見た目が反映されるのと、ソースコード側に該当する実装が反映されるのでとても便利です。
例えば下図はTextのFontに「Large Title」を設定した場合です。.font(.largeTitle)
という部分が追加されているのがわかります。もちろん同じ実装をソースコード側でごりごりしていってもOKです。
それではボタンを追加してみましょう。
①ソースコード上でボタンを追加したい場所にカーソルをあて、②Xcode画面右上にある「+」ボタンを押し、③出てきた画面でButtonを探して追加します。そうするとButtonのソースコードが追加されます。
ところがそれだけだとエラー*2になってしまいます。
解説はここでは省きますが、とりあえず縦方向のレイアウトを作るためのコンテナであるVStack
*3でTextとButtonを囲ってあげるとエラーを解消できます。
TextとButtonが近すぎなので間にSpacer
をはさんでレイアウトを調整しましょう。間(height)を適当に100に設定します。
これでこんな見た目ができました。
最後にボタンを押したらテキストが変わるようにしてみましょう。
SwiftUIで変化するUIは下記のように扱います。
@State
を付けたvarの変数を宣言するUIが変化する=Viewが状態を持つってことで、その状態を表す変数に@State
をつけるってのはわかりやすいですね。状態は変わるのでここでの変数はもちろんvar
で宣言します。
例えばボタンを押したらTextに表示している文字列が変わる場合を下記に示します。
まず元々Textの引数に直接指定していた文字列をstr
という変数で設定するようにします。
次にButtonの引数の action: {}
内で変数str
文字列を設定し直す実装を追加します。
これで以上です。動作確認はPreview画面の右下にあるボタンからLive Previewを起動したり、Simulatorを起動することで確認できます。ボタンを押したら「Hello, World!」が「Hello, SwiftUI!」に変わったら成功です!
最低限の要素だけ押さえてSwiftUIを使ってみました。雰囲気は掴めたでしょうか?
すぐに見た目が確認できるところや、すべてがソースコードで管理できる(ソースコードとStoryboardで設定がバラけない)ところがとても良いですね。この先はチュートリアルをやってみるも良し、ごりごり自分で試してみるも良しということでどんどんやっていきましょう〜。
みなさんの知見をSwift愛好会などで共有していただけるのをお待ちしております!
[*2] Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type(戻る)
[*3] 横方向のレイアウトを作る場合はHStack(戻る)