SwiftUI 学习笔记 08:结构(一)
因为断网又停了一天,等明天周六和周日各多补一节。
就像极富影响力的一本书《神话人月》(The Mythical Man-Month)的作者弗雷德·布鲁克斯(Fred Brooks)曾经说过的那样:“机智的程序员……通常可以通过将自己与代码分离开来,回馈并考虑数据来做到最好。表示是编程的本质。”
创建结构
结构让我们从几个小类型中创建自己的数据类型。例如,你可能将三个字符串和一个布尔值放在一起,并说它代表你的应用程序中的用户。
这些自定义类型(用户,游戏,文档等)构成了我们构建的软件的真正核心。如果你得到这些权则往往你的代码将随之而来。
结构使用struct
来创建,例如我创建一个包含字符串的结构:
1 | struct Zhhoo { |
类型创建完毕之后我们就可以调用它:
1 | var adr = Zhhoo(url: "zhhooo.com") |
当然,因为我们创建了变量adr
,我们还可以通过点记法来修改它:
1 | adr.url = "blog.zhhooo.com" |
其他例子:
1 | struct User { |
计算属性(结构的返回值计算)
结构的参数可以是一个返回值构成的,例如:
1 | struct Zhhoo { |
head
的值会根据ssl
的值的变化而变化。
注意:
1.计算属性必须要指定参数类型
2.常量不能作为计算属性
其他例子:
1 | struct Wine { |
属性观察器
通过属性观察器你可以在结构中监听你的值,如果发生了改变则触发一些任务。有两种属性观察器,一个是didSet
(在值改变后触发),一个是willSet
(在值改变前触发)。例如:
1 | struct Progress { |
现在,我们可以创建该结构的实例并随时间调整其进度:
1 | var progress = Progress(task: "Loading data", amount: 0) |
我们想让 Swift每次amount
更改时都打印一条消息,我们可以使用didSet
属性观察器。每次amount
更改时,它将运行一些代码:
1 | struct Progress { |
完整代码:
1 | struct Progress { |
在结构中嵌入方法
我们可以直接在结构中嵌入函数,这样我们就可以通过点记法的方式对它进行调用,例如:
1 | struct Zhhoo { |
变异方法
在一般情况下,swift不允许嵌入的方法有修改结构内变量的代码。例如错误代码:
1 | struct Zhhoo { |
如果想要方法内包含修改变量的代码,那么就需要用mutating
进行标记,例如:
1 | struct Zhhoo { |
因为更改了属性,所以Zhhoo
只允许在作为变量的实例中调用该方法,而不能用常量。
1 | var adr = Zhhoo(url: "zhhooo.com") |
其他例子:
1 | struct Book { |
字符串的属性和方法
到目前为止,我们已经使用了很多字符串,事实证明它们是结构-它们具有自己的方法和属性,可用于查询和操作字符串。
首先,让我们创建一个测试字符串:
1 | let string = "Do or do not, there is no try." |
你可以使用其count属性读取字符串中的字符数:
1 | print(string.count) |
他们有一个hasPrefix()方法,如果字符串以特定字母开头,则返回true:
1 | print(string.hasPrefix("Do")) |
你可以通过调用字符串的uppercased()方法将其大写:
1 | print(string.uppercased()) |
你甚至可以让Swift将字符串的字母排序成一个数组:
1 | print(string.sorted()) |
字符串具有更多的属性和方法-尝试键入string.以显示Xcode的代码完成选项。
数组的属性和方法
数组也是结构,这意味着它们也具有自己的方法和属性,可用于查询和操作数组。
这是一个让我们开始的简单数组:
1 | var toys = ["Woody"] |
你可以使用其count属性读取数组中的项目数:
1 | print(toys.count) |
如果要添加新项目,请使用如下append()方法:
1 | toys.append("Buzz") |
你可以使用其firstIndex()方法在数组内找到任何项,如下所示:
1 | toys.firstIndex(of: "Buzz") |
这将返回1,因为数组从0开始计数。
就像使用字符串一样,你可以让Swift将数组的项目按字母顺序排序:
1 | print(toys.sorted()) |
最后,如果要删除项目,请使用如下remove()方法:
1 | toys.remove(at: 0) |
数组具有更多的属性和方法–尝试键入toys.以显示Xcode的代码完成选项。
参考资料
- 感谢你赐予我前进的力量