SnowSeeker:はじめに
SnowSeeker: Introduction
SwiftUIで2つのサイドバイサイドビューを操作する
Working with two side by side views in SwiftUI
オプションでのalert()およびsheet()の使用
Using alert() and sheet() with optionals
SwiftUIにはアラートとシートを作成する2つの方法があり、これまでは1つしか使用していませんでした。ブール値がtrueになったときにアラートまたはシートを表示するブール値へのバインディングです。
第二の選択肢はそれほど頻繁に使用されませんが、あなたがそれを必要とする数回のために非常に便利です:あなたは、オプションを使用することができIdentifiable、あなたの条件として、オブジェクトを、そのオブジェクトが値を持っている場合、警告またはシートが表示されます。この種類のクロージャーは、条件に使用されたオプションではない値を渡すので、安全に使用できます。
アラートが解除されるとすぐに、SwiftUIはselectedUserに戻りnilます。
import SwiftUI struct User: Identifiable { var id = "Taylor Swift" } struct ContentView: View { @State private var selectedUser: User? = nil @State private var isShowingAlert = false var body: some View { Text("Hello, World!") .onTapGesture { self.selectedUser = User() } .alert(item: $selectedUser) { user in Alert(title: Text(user.id)) } } }
透明なレイアウトコンテナーとしてのグループの使用
Using groups as transparent layout containers
SwiftUIのGroupビューは、10の子ビューの制限を回避するために一般的に使用されますが、別の重要な動作もあります。透明なレイアウトコンテナーとして機能します。つまり、グループ内に一連のビューを作成し、そのグループを異なるスタックにラップして、異なる動作を実現できます。
グループにはレイアウト情報が含まれていないため、3つのテキストフィールドが縦、横、または奥行きのいずれでスタックされるかはわかりません。これは、の透明なレイアウト動作Groupが重要になる場所です。
import SwiftUI struct UserView: View { var body: some View { Group { Text("Name: Paul") Text("Country: England") Text("Pets: Luna, Arya, and Toby") } } } /* struct ContentView: View { @State private var layoutVertically = false var body: some View { Group { if layoutVertically { VStack { UserView() } } else { HStack { UserView() } } } .onTapGesture { self.layoutVertically.toggle() } } } */ struct ContentView: View { @Environment(\.horizontalSizeClass) var sizeClass var body: some View { Group { if sizeClass == .compact { VStack(content: UserView.init) } else { HStack(content: UserView.init) } /* if sizeClass == .compact { VStack { UserView() } } else { HStack { UserView() } } */ } } }