数据绑定,改变标题 @state
import SwiftUI
// 数据绑定,改变标题
struct StatePage: View {
@State private var textInput:String = ""
@State private var title:String = "数据绑定,改变标题"
var body: some View {
VStack {
//不加$是单向
Text(self.title)
// 加$是双向绑定
TextField("请输入内容", text: **self**.$textInput)
.font(.title)
.frame(width: UIScreen.main.bounds.width - 20,height: 50,alignment: .center)
.padding(10)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button {
self.title = self.textInput
} label: {
Text("确定按钮")
.font(.title)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(15)
}
}
}
}
数据绑定,传递结构 @Binding
import SwiftUI
// 子控件
struct HeaderView:View{
// 接收父控件的数据
@Binding var title:String
var counter:Int = 0
init(title: Binding<String>) {
self._title = title
// 属性包装器
let sentence = **self._title.wrappedValue
//计算传进来的文字数量
self.counter = sentence.count
}
var body: some View{
Text(**self**.title + "/\(**self**.counter)")
}
}
struct BindingPage: View {
// 定义数据绑定
@State private var title:String = "数据绑定"
var body: some View {
VStack {
Text(self.title)
HeaderView(title: self.$title)
Button {
self.title = "失业中 学习swiftUI"
} label: {
Text("确定")
.font(.title)
.padding()
.background(Color.green)
.foregroundColor(.white)
}
}
}
}
取得系统数据@Environment
import SwiftUI
// 取得系统频道
struct EnvironmentPage: View {
// 读取系统的颜色变量
@Environment(\.colorScheme) **var** mode
var body: some View {
VStack {
Text("系统颜色模式:\(mode == .dark ? "暗黑模式" : "白昼模式")")
// 动态显示
Text("失业中").font(.largeTitle)
.padding()
.background(mode == .dark ? Color.black : Color.yellow)
.foregroundColor(mode == .dark ? Color.white : Color.black)
.cornerRadius(15)
}
}
}
@观察绑定数据 ObservableObject
import SwiftUI
/***
*观察者数据绑定*
*@ObservableObject*
*@Published*
*@ObservedObject*
*1.建立一个类文件,用来存储全局数据*
@EnvironmentObject
*/
// 需要遵守 ObservableObject 协议
class Model:ObservableObject{
@Published var data = [] // 使用StateObject 属性包装器修饰对象,最少内部需要保证一个被@Publister修饰
@Published **var** AppTitle:String = "失业中学SwiftUI"
}
// @StateObject 在该视图和共享的其他视图中使用
class User:ObservableObject{
var username = "@twostrasws"
}
class Player:ObservableObject{
@Published **var** name = "Taylor"
@Published **var** age = 25
}
class Student:ObservableObject{
@Published **var** name = ""
}
struct ObservableObjectPage: View {
@StateObject var model = Model() // 该视图管理
@StateObject var user = User()
@StateObject var player = Player()
@ObservedObject var appDate:AppDate
@EnvironmentObject **var** user2:Student // 还是有问题
let student = Student()
var body: some View {
// OtherView(model: model)
VStack {
Text("Username: \(user.username)").bold().font(.title)
Text(**self**.model.AppTitle).bold().font(.largeTitle)
VStack {
Text(**self**.appDate.Author).bold().font(.largeTitle)
//Text(user2.name).bold().font(.largeTitle)
}
Button {
self.appDate.Author = "加油"
} label: {
Text("更新")
.padding()
.font(.subheadline)
.background(Color.green)
.foregroundColor(Color.white)
.cornerRadius(15)
}
OtherView(player: player)
// EditStudentView().frame(width: 30,height: 40.0)
}
}
}
struct OtherView:View{
@ObservedObject **var** player:Player// 由父视图注入
var body: some View{
Text("Hello,\(player.name)")
}
}
访问环境对象 EnvironmentObject