類型定義的語法
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里給計算屬性賦值,否則死循環(huán)
}
}
//只讀計算屬性
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 步