9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwiftUIAdvent Calendar 2023

Day 2

#Preview を使用してSwiftUIビューを作成する!~Swift macros~

Last updated at Posted at 2023-11-03

#Previewでプレビューの定義が簡素化

Xcode15 および Swift5.9 以降では、#Previewを使用して SwiftUI ビューの作成の定義を簡素化することができます!これはWWDC2023リリースで導入されたSwift macrosの概念を使用しています。

Swift macrosとは

Swift macrosは、ソースコードのコンパイル時にコードを変換し、その部分を生成することで、Swiftで繰り返しコードを作成することを回避できます。マクロの呼び出しは、常に加算操作です。つまり、マクロは新しいコードを追加しますが、既存のコードを削除したり修正したりすることはありません。

SwiftUI #Previewの作成の比較

旧: 以前は、プレビュー構成を次のように記述していました!

ContentView.swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, world!")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

新: Xcode15以降、SwiftUI ビューのプレビューを作成するには、次のように実行できます!

ContentView.swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, world!")
        }
        .padding()
    }
}

#Preview {
    ContentView()
}

マクロを使用すると、プレビューの定義が簡素化することができる!
また、プレビューのタイトルを簡単に指定できるようになるというメリットもある!

複数のプレビューを定義する

ContentView.swift
import SwiftUI

struct ContentView: View {
    var title: String
    var body: some View {
        VStack {
            Text(title)
                .font(.title)
        }
        .padding()
    }
}

#Preview("Yes Preview") {
    ContentView(title: "Yes")
}

#Preview("No Preview") {
    ContentView(title: "No")
}

#Preview("プレビューのタイトル")で、簡単にプレビューのタイトルが指定できる!
プレビューするビューごとに #Preview マクロを使用する!

以下のようにYes PreviewとNo Previewが作成されました!
41fc38d5c3904440c67061b7b2e821fc.png

cc10b369ec025345acaee7be729a3540.png

参考文献

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?