置顶

菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
"不积跬步,无以至千里;不积小流,无以成江海"
状态变量的定义
如果我们把一个视图结构体类比为vue中的一个组件
那么类比vue中的data属性,定义一个变量,它被引用时,它的变化会直接反应到视图上
struct ContentView: View { // 定义一个私有的状态变量 test 它的初始值是字符串123 // 如果使用 let 那么这个变量不能被更改,会报错 @State private var test:String = "123"; var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) // 来一个文字组件,内容就是test变量 Text(test) // 来一个按钮组件,点击过后修改test变量的内容 // 花括号里面是按钮点击之后要做的事情 // test变量的修改将会直接响应到 Text 组件上面去 Button("点击这个按钮改变文字"){ test = "阿斯顿发送到发" } } .padding() } }
在canvas中预览如下图:
数据绑定
类比vue中 input 组件的 v-model
input 里面变化的值将直接响应到变量绑定的组件上面去
swiftUI 中的双向绑定使用 $ 符号加变量进行表示
struct ContentView: View { @State private var test:String = "123"; var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) Text(test) // 搞一个 TextField组件,类比Input // placeholder:请输入文字,显示的内容为text,$符号加变量名表示双向绑定 // 那么当我在这个TextField里面输入文字的时候,上面的Text组件的内容将会跟着变化 // TextField里面的文字居中对齐 TextField("请输入文字",text: $test).multilineTextAlignment(.center) Button("点击这个按钮改变文字"){ test = "阿斯顿发送到发" } } .padding() } }
运行如上代码并在输入框中输入文字可以在预览中得到如下的结果:
拓展
那么根据以上得到的信息,我们可以搞一个简易的表单填报界面
struct ContentView: View { // 用户名 @State private var userName:String = ""; // 密码 @State private var passWord:String = ""; // 验证码 @State private var code:String = ""; // 提示语 @State private var res:String = "请输入。。。"; // 提示语的颜色,color类型 @State private var color:Color = .red; var body: some View { // 整体纵向布局 VStack { // 页面标题,加粗,标题字体 Text("登陆界面").fontWeight(.bold).font(.title) // 分隔占位,有点类似html中flex的flex:1,具体怎么用之后再看 Spacer() // 一个横向布局,表单项名称-分隔占位-以及表单项 // 给一个 .all 的 padding,不然不好看 HStack{ Text("用户名") Spacer() TextField("请输入用户名",text:$userName).multilineTextAlignment(.center) }.padding(.all) HStack{ Text("密码") Spacer() // secure field 跟 TextField基本类似,只是隐藏输入的内容 SecureField("请输入密码",text:$passWord).multilineTextAlignment(.center) }.padding(.all) HStack{ Text("验证码") Spacer() TextField("请输入验证码",text:$code).multilineTextAlignment(.center) }.padding(.all) Spacer() // 提示语和button在一起 Text(res).foregroundColor(color) Button("登陆"){ color = .red // button 的点击事件action,做一个简单的判断 // 修改 res 的名称,以及res的颜色 if(userName == ""){ res = "请输入用户名!" return ; } if(passWord == ""){ res = "请输入密码!" return ; } if(code == ""){ res = "请输入验证码" return ; } color = .green; res = "登陆成功" // 清空表单数据 userName = ""; passWord = ""; code = ""; }.buttonStyle(.bordered) // 按钮的样式随便选一个试试 } .padding() } }
运行如上代码可以得到如下的界面及操作:
总结
一些基本的使用和变量的定义,简单的入门过程感觉还是挺好玩儿的
不过没有进行深入的研究,使用过程中感觉好多东西需要积累
前期先不慌搞细节以及理论,兴趣和动手实现要紧
再接再厉!


还没有评论,来说两句吧...