はじめに

SwiftUIとは?

SwiftUIは、Swiftの力を活用して、できるだけ少ないコードでAppleプラットフォーム全体にわたる優れたアプリを構築するのに役立ちます。SwiftUIを使用すると、1つのツールとAPIセットだけで、あらゆるAppleデバイスのすべてのユーザーにさらに優れた体験を提供できます。SwiftUI

環境とソフトウェア

  • MacOS(64bit)
  • Xcode13
  • オプション:iPadOS

推奨チュートリアル

オンライン

The 100 Days of SwiftUI

ZHHEO_Swift

DesignCode

Youtube

Learn SwiftUI online for FREE | Bootcamp #0

Building your first iOS app - SwiftUI Livestream

Build your first iOS app with SwiftUI

Build a Recipe App from scratch with SwiftUI - Part 1

Reality School


宣言的構文

SwiftUIは宣言的構文を使用するため、ユーザーインターフェイスが何をすべきかを単純に記述できます。たとえば、テキストフィールドで構成されるアイテムのリストが必要であることを記述し、各フィールドの配置、ォント、色を記述できます。コードはこれまでになくシンプルで読みやすくなり、時間とメンテナンスを節約できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
import SwiftUI

struct SwiftUIView: View {
var body: some View {
Text(/@START_MENU_TOKEN@/"Hello, World!"/@END_MENU_TOKEN@/)
}
}

struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}

SwiftUI

パート1

TabView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
struct ContentView : View {

var body: some View {

ZStack {
TabView {

FirstView()
.tabItem {
Image(systemName: "gamecontroller.fill")

Text("Game")
.font(.largeTitle)

}
.navigationViewStyle(.stack)

SecondView()
.tabItem {
Image(systemName: "allergens")

Text("Sculpture")
.font(.largeTitle)
}
.navigationViewStyle(.stack)


ThirdView()
.tabItem {
Image(systemName: "heart.text.square")

Text("Protection Mode")
.font(.largeTitle)
}
.accentColor(.blue)
.navigationViewStyle(.stack)

FourthView()
.tabItem {
Image(systemName: "person.circle")

Text("About")
.font(.largeTitle)

}
.navigationViewStyle(.stack)

}
}
}
}
  • FirstView()からFourthView()も準備する必要があります

ビューの1つを見てみましょう:

このビューに関連付けられたタブバーアイテムを設定します。

1
2
3
4
5
6
TabView {
ContentView()
.tabItem {
Label("Menu", systemImage: "list.dash")
}

1
2
3
4
5
ThirdView()
.tabItem {
Image(systemName: "heart.text.square")
Text("Protection Mode")
.font(.largeTitle)
  • Labelの方が良いです

tabItem(_:)

パート1の参考文献

Adding TabView and tabItem()

パート2

NavigationView

シンプルなNavigationView

1
2
3
4
5
6
7
struct ContentView: View {
var body: some View {
NavigationView {
Text("SwiftUI tutorials")
}
}
}

タイトルも追加する必要があります。

1
.navigationTitle("TEXT")

ナビゲーションビューのボタン

navigationBarItems()モディファイアを使用して、ナビゲーションバーに先頭と末尾のボタンを追加します。先頭のボタンはSF Symbolです(そこからダウンロードできます)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NavigationView {
Text("SwiftUI tutorials")
.navigationBarTitle("Master view")
.navigationBarItems(leading:
Button(action: {
print("SF Symbol button pressed...")
}) {
Image(systemName: "calendar.circle").imageScale(.large)
},
trailing:
Button(action: {
print("Edit button pressed...")
}) {
Text("Edit")
}
)
}

Stack

一度に1つのトップビューのみを表示するビュースタックで表されるナビゲーションビュースタイル。

iPadバージョンの開発を行っている場合、iPadとiPhoneのビューの間に違いが見られる場合があります。タイトルに問題があるように見えます。

これを解決するには:

1
.navigationViewStyle(.stack)

NavigationLink

ナビゲーションプレゼンテーションを制御するビュー。

宣言

1
struct NavigationLink<Label, Destination> where Label : View, Destination : View {

概要

ユーザーはナビゲーションリンクをクリックまたはタップして、NavigationView内にビューを表示します。リンクの末尾のクロージャでビューコンテンツを提供することで、リンクの視覚的な外観を制御できます。たとえば、Labelを使用してリンクを表示できます:

1
2
3
4
5
6
7

```swift
NavigationView {
NavigationLink(destination: DetailView()) {
Label("Show Detail View", systemImage: "person")
}
}

NavigationLinkの例

1
2
3
4
5
6
7
8
9
10
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: Text("Detail View")) {
Text("Show Detail View")
}
.navigationTitle("Navigation")
}
}
}

パート2の参考文献

NavigationView

NavigationLink

NavigationBarItems

パート3

List

データのスクロール可能な行を表示するコンテナビュー。

1
2
3
4
5
6
7
8
9
struct ContentView: View {
var body: some View {
List {
Text("First Row")
Text("Second Row")
Text("Third Row")
}
}
}

動的なリスト

1
2
3
4
5
6
7
8
9
struct ContentView: View {
let names = ["John", "Apple", "Tim"]

var body: some View {
List(names, id: \.self) { name in
Text(name)
}
}
}

セクション付きリスト

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct ContentView: View {
var body: some View {
List {
Section(header: Text("Important tasks")) {
Text("Eat chocolate")
Text("Watch movies")
Text("Drink water")
}

Section(header: Text("Other tasks")) {
Text("Walk the dog")
Text("Do homework")
}
}
}
}

カスタムリストスタイル

1
2
3
4
5
6
List {
ForEach(items) { item in
Text(item.name)
}
}
.listStyle(GroupedListStyle())

パート3の参考文献

List

Working with Lists and Navigation

パート4

Form

設定画面やデータ入力画面などのグループ化されたコントロールを表示するコンテナビュー。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct ContentView: View {
@State private var username = ""
@State private var email = ""

var body: some View {
Form {
TextField("Username", text: $username)
TextField("Email", text: $email)

Section(header: Text("Notifications")) {
Toggle("Email notifications", isOn: .constant(true))
Toggle("Push notifications", isOn: .constant(false))
}
}
}
}

Picker

オプションのリストから選択できるコントロール。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct ContentView: View {
@State private var selectedColor = 0
let colors = ["Red", "Green", "Blue"]

var body: some View {
Form {
Picker("Select a color", selection: $selectedColor) {
ForEach(0..<colors.count) { index in
Text(colors[index])
}
}
}
}
}

DatePicker

日付と時刻を選択するためのコントロール。

1
2
3
4
5
6
7
8
9
10
11
struct ContentView: View {
@State private var date = Date()

var body: some View {
Form {
DatePicker("Select a date",
selection: $date,
displayedComponents: [.date, .hourAndMinute])
}
}
}

パート4の参考文献

Form

Picker

DatePicker

まとめ

この基礎チュートリアルでは、SwiftUIの主要なコンポーネントについて学びました:

  1. TabView - 複数のビュー間のナビゲーション
  2. NavigationView - 階層的なナビゲーション構造
  3. List - データの表示とスクロール
  4. Form - データ入力と設定画面

これらのコンポーネントを組み合わせることで、美しく機能的なiOSアプリを構築できます。

次のステップ:

  • より高度なSwiftUIの機能を学ぶ
  • アニメーションとトランジションを追加
  • データ永続化の実装
  • ネットワーキングの統合

参考文献

  1. Apple SwiftUI Documentation
  2. Hacking with Swift
  3. SwiftUI by Example
  4. Apple Developer Tutorials
    </rewritten_file>