decochのブログ

フリーランスのiOSエンジニア decoch のブログです

SwiftUIのプレビューがうまくいかない時はカラー定義を見直してみよう

これはなに?

SwiftUIで開発をしていると開発初期はプレビューを使い効率的に開発ができていたのですがコード量が増えたとたんプレビューが表示されなくなりました。
どういったコードを書くとプレビューが表示されなくなるのか気になったので調べてたものです。

開発環境

  • Xcode12.3
  • MacOS BigSur 11.0.1

どういったコードを書くとダメなのか

デフォルトで定義されているカラーを extension で上書き使用するとプレビューが動かなくなります。

import SwiftUI

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

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

extension Color {
    static let primary = Color("Primary")
}

プレビュー画面

f:id:decoch:20201215120529p:plain
preview error

他にも .white , .black などがあります。今回サンプルに使った .primary というプロジェクト内のカラー定義で使いたい名前もデフォルトで定義されています。
独自カラーは割り切ってプロジェクト名をPrefixにつけて色を管理すると被りづらくプレビューを使ったまま開発ができて良いと思います。