1. List列表
List列表可以使用ForEach创建多个Text
与Form的不同之处:List可以自动实现ForEach
java
List(0 ..< 5){
Text("在List中动态创建了第\($0)行")
}
.listStyle(GroupedListStyle())
通过id属性指定具体的行
- 当通过遍历“数据范围”(例如 0…<5 )或者通过遍历“数组元素”的方式在List或者ForEach中动态创建了
row
时,SwiftUl的编译器是通过这些row
的id属性来辨识的, - 当制定了id属性,当我们在列表中需要删除某一行时便可以直接删掉,而不用再重新绘制整个视图页面了。
- 一般id属性的值使用的就是被遍历的数据项本身,因此使用
.self
, 例如:
struct ContentView: View {
let students = ["张三丰", "李莫愁", "王语嫣", "赵敏"]
var body: some View {
List(students, id: \.self) {
Text($0)
}
}
}
2. Optional类型的数据
在程序中经常碰到有一个数据,它可能有值,也可能没有值的情况,针对这种情况,Swift设置了Optional类型。
- 一个Optional类型的常量或者变量,说明它可以有一个指定的值,也可以是
nil
- Optional可以用来修饰所有数据类型
2.1 可选常量
如下声明一个常量会在第二行报错,因为没有任何可以指定的值。常量声明时必须初始化,也必须指定一个默认值。
let someVal: Int? = 10
print(someVal)
修改代码如下不报错
let someVal: Int? = 10
print(someVal)
2.2 可选变量
如下代码,someVal默认为 nil
var someVal: Int?
print(someVal)
2.3 解包
- 什么是解包?
解释:在可选变量不指定值时,变量默认值为nil
,但是nil
在程序运算和调用时会出错,所以需要在进行实际运算操作前将值为nil
的可能性去除。
具体代码如下:
- 方法一:
使用感叹号!
可以理解为一种肯定的语气,表示这里的sameVal一定是有值的(不为nil
的)
但是这种做法容易出错,万一someVal没有实际值就坏了。
var someVar: Int? = 10
print(someVar! + 20)
- 方法2:
使用if let
,软解包
var someVar: Int? = 10
if let myVar = someVar {
//只有someVal有确定值时才会进入到这里
}
测试结果:控制台输出 10
3. Bundle
Bundle 管理了一个 Apple App 的所有资源,一般情况,一个App对应一个默认的Bundle,叫