类型定义的语法
struct SomeStructure {
// 在这里定义结构体
}
class SomeClass {
// 在这里定义类
}
注:通过 struct 关键字引入结构体
通过 class 关键字引入类
class Person{
//定义属性
var name:String = ""
var sex:String = ""
var age:Int = 0
//定义方法
func say(){
print("你好")
}
}
实例化对象
var p1 = Person()
//访问属性和方法
p1.name = "张三"
p1.sex = "男"
p1.age = 18
print(p1.name)
print(p1.age)
引用类型
var p2 = p1
p2.name = "小红"
p2.sex = "女"
p2.age = 13
print(p1.name)
print(p1.sex)
print(p1.age)
判断是否为同一个实例
print(p1===p2)//true
let p3 = Person()
print(p1===p3)//false
注:相同(===)
不相同(!==)
存储属性:可以是一个常量或者变量
可以指定默认值,或可以在构造方法里初始化
计算属性:除存储属性外,类、结构体和枚举可以定义计算属性
不直接存储值,提供一个 getter 和一个可选的 setter,来间接获取和设置其他属性或变量的值。
class Student{
//存储属性
var age:Int = 0
var javaScore:Double = 0.0
var htmlScore:Double = 0.0
//计算属性
var averageScore:Double {
//获取值
get{
print("get被调用")
return (javaScore+htmlScore)/2 //get中必须有return语句
}
//赋值
set{
print("set被调用,\(newValue)")
//self.averageScore = newValue 不要再set里给计算属性赋值,否则死循环
}
}
//只读计算属性
var averageScore2:Double {
//获取值
get{
print("get被调用")
return (javaScore+htmlScore)/2
}
}
//只读计算属性-省略get{}
var averageScore3:Double {
//获取值
print("get被调用")
return (javaScore+htmlScore)/2
}
//类属性
static var courseCount:Int = 2
}
var stu = Student()
//使用存储属性
stu.age = 18
stu.javaScore = 90
stu.htmlScore = 60
//使用计算属性
print(stu.averageScore)
stu.averageScore = 100
//只读计算属性
print(stu.averageScore2)
print(stu.averageScore3)
//使用类属性
print(stu.courseCount)//不能通过对象访问
print(Student.courseCount)
懒加载属性
class CloseRange{
var start:Int = 0
var end:Int = 1000
//方案:result设计为计算属性
var result:Int{
get{
print("开始计算...")
var res = 0
//此时采用求和操作来模拟进行大量计算。
for i in self.start...self.end{
res += i
}
return res
}
}
var range = CloseRange()
print(range.result)
print(range.result)
print(range.result)
print(range.result)
属性观察器
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("将 totalSteps 的值设置为 \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("增加了 \(totalSteps - oldValue) 步")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// 将 totalSteps 的值设置为 200
// 增加了 200 步
stepCounter.totalSteps = 360
// 将 totalSteps 的值设置为 360
// 增加了 160 步
stepCounter.totalSteps = 896
// 将 totalSteps 的值设置为 896
// 增加了 536 步