1.@State包装器的作用和用法
struct ContentView : View {
@State private var count: Int = 0
var body: some View {
Button ( action: {
count += 1
} ) {
Text ( "Count: \( count ) " )
}
}
}
2.@Binding包装器的作用和用法
struct ParentView : View {
@State private var isChildViewVisible = false
var body: some View {
VStack {
Toggle ( isOn: $isChildViewVisible) {
Text ( "Show Child View" )
}
if isChildViewVisible {
ChildView ( isVisible: $isChildViewVisible)
}
}
}
}
struct ChildView : View {
@Binding var isVisible: Bool
var body: some View {
Text ( "Child View" )
Button ( action: {
isVisible = false
} ) {
Text ( "Hide" )
}
}
}
3.@ObservedObject包装器的作用和用法
class UserData : ObservableObject {
@Published var name: String = ""
}
struct ContentView : View {
@ObservedObject var user = UserData ( )
var body: some View {
TextField ( "Enter your name" , text: $user. name)
. textFieldStyle ( . roundedBorder)
Text ( "Hello, \( user. name ) !" )
}
}
4.@EnvironmentObject包装器的作用和用法
class UserData : ObservableObject {
@Published var name: String = ""
}
struct ContentView : View {
@EnvironmentObject var user: UserData
var body: some View {
TextField ( "Enter your name" , text: $user. name)
. textFieldStyle ( . roundedBorder)
Text ( "Hello, \( user. name ) !" )
}
}
5.@StateObject包装器的作用和用法
class DataModel : ObservableObject {
@Published var data: [ String ] = [ ]
}
struct ContentView : View {
@StateObject var dataModel = DataModel ( )
var body: some View {
VStack {
Button ( action: {
dataModel. data. append ( "New Item" )
} ) {
Text ( "Add Item" )
}
ForEach ( dataModel. data, id: \ . self ) { item in
Text ( item)
}
}
}
}
6.@GestureState包装器的作用和用法
struct ContentView : View {
@GestureState private var isLongPressed = false
var body: some View {
Circle ( )
. fill ( isLongPressed ? Color . red : Color . blue)
. frame ( width: 100 , height: 100 )
. gesture (
LongPressGesture ( )
. updating ( $isLongPressed) { currentState, gestureState, _ in
gestureState = currentState
}
)
}
}
7.@Environment包装器的作用和用法
import SwiftUI
struct ContentView : View {
@Environment ( \ . colorScheme) var colorScheme
var body: some View {
if colorScheme == . dark {
Text ( "Dark Mode" )
. foregroundColor ( . white)
. background ( Color . black)
} else {
Text ( "Light Mode" )
. foregroundColor ( . black)
. background ( Color . white)
}
}
}
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView ( )
. previewLayout ( . sizeThatFits)
}
}