Open1

【SwiftUI】@unknown defaultでfatalErrorせずログを落とす

yamomiyamomi

@unknown defaultを書いていないと、Swift 6ではエラーになる。
将来未知のenumケースが追加されたときには気づけるようにしておきたい && アプリをクラッシュさせたくない。

AsyncImage内では必ずViewを返す必要があり、単純にprintだけでは済ませられない。
そのため、EmptyViewを表示しておき、onAppearで警告ログを出す形にした。

今回はLoggerまでは使わず、まずは雑にprintで対応しておく。

AsyncImage(url: repo.owner.imageURL) { phase in
  switch phase {
  case .empty:
    ProgressView()
      .frame(height: imageHeight)

  case .success(let image):
    image
      .resizable()
      .scaledToFit()
      .frame(height: imageHeight)

  case .failure:
    Image(systemName: "person.crop.circle.fill")
      .resizable()
      .scaledToFit()
      .frame(height: imageHeight)

  @unknown default:
    EmptyView()
      .onAppear {
        print("[⚠️ Warning] [RepoDetailView] Unexpected AsyncImage.Phase received: \(phase)")
      }
  }
}