類的屬性介紹
- Swift中類的屬性有多種
- 存儲屬性:存儲實例的常量和變量
- 計算屬性:通過某種方式計算出來的屬性
- 類屬性:與整個類自身相關的屬性
存儲屬性
- 存儲屬性是最簡單的屬性,它作為類實例的一部分,用於存儲常量和變量
- 可以給存儲屬性提供一個默認值,也可以在初始化方法中對其進行初始化,而且必須得有默認值,否則會報錯
- 下面是存儲屬性的寫法
- age和name都是存儲屬性,用來記錄該學生的年齡和姓名
- chineseScore和mathScore也是存儲屬性,用來記錄該學生的語文分數和數學分數
class Student : NSObject {
計算屬性
- 計算屬性並不存儲實際的值,而是提供一個getter和一個可選的setter來間接獲取和設置其它屬性
- 計算屬性
一般只提供getter方法
- 如果只提供getter,而不提供setter,則該計算屬性為只讀屬性,並且可以省略get{}
- 下面是計算屬性的寫法
- averageScore是計算屬性,通過chineseScore和mathScore計算而來的屬性
- 在setter方法中有一個newValue變量,是系統指定分配的
class Student : NSObject {
類屬性
- 類屬性是與類相關聯的,而不是與類的實例相關聯
- 所有的類和實例都共有一份類屬性.因此在某一處修改之后,該類屬性就會被修改
- 類屬性的設置和修改,需要通過類來完成
- 下面是類屬性的寫法
- 類屬性使用static來修飾
- courseCount是類屬性,用來記錄學生有多少門課程
class Student : NSObject {
監聽屬性的改變
- 在OC中我們可以重寫set方法來監聽屬性的改變
- Swift中可以通過屬性觀察者來監聽和響應屬性值的變化
- 通常是監聽存儲屬性和類屬性的改變.(對於計算屬性,我們不需要定義屬性觀察者,因為我們可以在計算屬性的setter中直接觀察並響應這種值的變化)
- 我們通過設置以下觀察方法來定義觀察者
- willSet:在屬性值被存儲之前設置。此時新屬性值作為一個常量參數被傳入。該參數名默認為newValue,我們可以自己定義該參數名
- didSet:在新屬性值被存儲后立即調用。與willSet相同,此時傳入的是屬性的舊值,默認參數名為oldValue
- willSet與didSet只有在屬性第一次被設置時才會調用,在初始化時,不會去調用這些監聽方法
- 監聽的方式如下:
class Person : NSObject { var name : String? {
import UIKit
class Student: NSObject {
// 定義屬性
// 定義存儲屬性
var age : Int = 0
var name : String?
var mathScore : Double = 0.0
var chineseScore : Double = 0.0
// 定義計算屬性: 通過別的方式計算到結果的屬性,稱之為計算屬性
var averageScore : Double {
return (mathScore + chineseScore) * 0.5
}
// 定義類屬性: 類屬性是和整個類相關的屬性.而且是通過類名進行訪問
static var courseCount : Int = 0
/*
// 定義方法,可以返回平均成績
func getAverageScore() -> Double {
// 在swift開發中,如果使用當前對象的某一個屬性,或者調用當前對象的某一個方法時,可以直接使用,不需要加self
return (mathScore + chineseScore) * 0.5
}
*/
}
// 給類屬性進行賦值
Student.courseCount = 2
// 創建對象
let stu = Student()
// 給對象的屬性賦值
stu.age = 10
stu.name = "yz"
stu.mathScore = 78
stu.chineseScore = 59.9
print(stu.age)
if let name = stu.name {
print(name)
}
let averageScore = stu.averageScore