网站首页 > 基础教程 正文
置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
"不积跬步,无以至千里;不积小流,无以成江海"
状态变量的定义
如果我们把一个视图结构体类比为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()
}
}
运行如上代码可以得到如下的界面及操作:
总结
一些基本的使用和变量的定义,简单的入门过程感觉还是挺好玩儿的
不过没有进行深入的研究,使用过程中感觉好多东西需要积累
前期先不慌搞细节以及理论,兴趣和动手实现要紧
再接再厉!
猜你喜欢
- 2024-10-16 书单 // 这些IT书口碑超好,豆瓣评分9.0以上——编程语言篇
- 2024-10-16 这年头学PS,学设计还有什么用,设计不求的时代已经来临
- 2024-10-16 工具|10款免费在线图片设计工具 免费图片设计在线生成器
- 2024-10-16 Xmas!送你Flutter Animation小星星!
- 2024-10-16 高以翔挚友发长文告别 暗示对方本打算与女友结婚
- 2024-10-16 用Python集“五福”| 攻略演示 pythonf5
- 2024-10-16 web前端工程师的“三驾马车” web前端工程师需要掌握的技能
- 2024-10-16 程序员的春天,用javascript写这个效果,赢得老板特批假期一周
- 2024-10-16 文艺码农~手把手教你如何绘制一辆会跑车
- 2024-10-16 你绝对需要重温的游戏 你绝对需要重温的游戏英文
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)