Viewを定義する

Published by @SoNiceInfo at 6/24/2020


Viewを自分で定義することで使い回すことができます。
さらに別ファイルで定義して呼び出すこともできます。

Viewとは

SwiftUIにおいてViewは非常に重要です。
構造体を定義する際にViewプロトコルに準拠させてbodyに表示したいViewを記述することによりViewを作成できます。
View内でViewを呼び出すことによりアプリのUIが完成します。
実はText, Image, HStackといった要素はすべてViewです。

Viewの作り方

Viewを自分で定義して同じコードをひとつにまとめることで開発・メンテナンスが楽になります。
Viewを作成する基本の型はこの様になっていて、別のViewからViewName()で呼び出せます。

struct ViewName: View {
    var body: some View {
        Text("This is custom View")
    }
}

Viewの作成例

ここではEmojiTileというViewを作成します。
EmojiTileは受け取った文字列と色を使ってそのとおりに表示する正方形のようなViewです。
Textに文字列、backgroundで色を指定することで表示できます。
Viewでは様々なModifier(修飾子)が利用できますがここではpadding(余白)とcornerRadius(角丸)を利用しています。

EmojiTileが準備できたらContentView内で呼び出します。
VStackで縦にEmojiTileを並べて表示します。

//
//  ContentView.swift
//

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            EmojiTile(text: "😀", color: .blue)
            EmojiTile(text: "😉", color: .green)
            EmojiTile(text: "😊", color: .purple)
            EmojiTile(text: "😀", color: .blue)
        }
    }
}

struct EmojiTile: View {
    var text: String
    var color: Color
    
    var body: some View {
        Text(text)
            .font(.custom("Emoji", size: 50))
            .padding(50)
            .background(color)
            .cornerRadius(10)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct viewを使った結果

Viewを別ファイルに書き出す

自分で定義してパーツ化したViewは別ファイルに書き出すことができます。
ContentView.swiftにすべて書いていくと可読性が下がっていくので別ファイルに書き出します。
ここではEmojiTileEmojiTile.swiftというファイルに書き出します。

//
//  ContentView.swift
//

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            EmojiTile(text: "😀", color: .blue)
            EmojiTile(text: "😉", color: .green)
            EmojiTile(text: "😊", color: .purple)
            EmojiTile(text: "😀", color: .blue)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
//
//  EmojiTile.swift
//

import SwiftUI

struct EmojiTile: View {
    var text: String
    var color: Color
    
    var body: some View {
        Text(text)
            .font(.custom("Emoji", size: 50))
            .padding(50)
            .background(color)
            .cornerRadius(10)
    }
}

struct EmojiTile_Previews: PreviewProvider {
    static var previews: some View {
        EmojiTile(text: "", color: .blue)
    }
}
struct viewを使った結果

参考

View - SwiftUI | Apple Developer Documentation

    アプリをリリースしました!

    ToDoアプリ

    iCloudを利用したデバイス間データ共有、ダークモードに対応しています。

    リリースしたToDoアプリのスクリーンショット

    IPアドレス履歴保存アプリ

    取得したIPアドレスを確認、位置情報とともに保存できます。

    リリースしたIPアドレス保存アプリのスクリーンショット