1、類的定義
1.1 Swift也是一門面向對象開發的語言。面向對象的基礎是類,類產生了對象。
在Swift中如何定義類呢?
class是Swift中的關鍵字,用于定義類。
類的定義格式:
class 類名 : SuperClass {
// 定義屬性和方法
}
定義的類,可以沒有父類.那么該類是rootClass
通常情況下,定義類時繼承自NSObject(非OC的NSObject)
// 1、 定義一個基類
class Animal {
}
// 2、定義一個繼承自NSObject的類
class Dog : NSObject {
}
// 3、定義一個類并聲明了 skinColor age 屬性 因為類中的屬性通常會進行賦值 所以會設置var 類型
class cat : NSObject {
var skinColor : String? = nil
var age : Int = 0
}
// 4、繼承自AnimalA
class Cow : AnimalA {
var age : Int = 0
}
let cow = Cow()
cow.age = 2
// 5、繼承自AnimalB 的類
class Dog : AnimalB {
var skinColor : String? = nil
var age : Int = 0
}
// 如果繼承自NSObject可以使用KVC進行賦值
let dog = Dog()
dog.setValuesForKeys(["skinColor" : "white" , "age" : 2 ])
1.2 屬性
存儲屬性是最簡單的屬性,它作為類實例的一部分,用于存儲常量和變量。
可以給存儲屬性提供一個默認值,也可以在初始化方法中對其進行初始化。
計算屬性并不存儲實際的值,而是提供一個getter和一個可選的setter來間接獲取和設置其它屬性。計算屬性一般只提供getter方法。如果只提供getter,而不提供setter,則該計算屬性為只讀屬性,并且可以省略get{}
類屬性是與類相關聯的,而不是與類的實例相關聯。所有的類和實例都共有一份類屬性.因此在某一處修改之后,該類屬性就會被修改。類屬性的設置和修改,需要通過類來完成,類屬性使用static來修飾。
類的屬性的寫法:
存儲屬性的寫法
var 屬性名 : 類型 = 0
var 屬性名 : 類型 ? = nil
var 屬性名 : 類型 ?
計算類型:
var 屬性名 : 類型 {
計算操作
return 需要的屬性值
}
類屬性:
static 屬性名 : 類型 = 0
static 屬性名 : 類型 ? = nil
// 6、存儲屬性 、 計算屬性 和 類屬性
class Student : NSObject {
// 定義屬性
var age : Int = 0 // 定義存儲屬性
var name : String? = nil // nil 也是一種數據類型
var Sex : String? // 可選類型不賦值默認也是nil的
var mathScore : Double = 0.0
var chineseScore : Double = 0.0
//定義方法 返回平均成績
func getAverageScore() -> Double {
return (mathScore + chineseScore )*0.5
}
// 這是一個計算屬性的寫法
var averageScore : Double {
let aver = (mathScore + chineseScore )*0.5
print(aver)
return aver
}
// 定義一個類屬性 : 類屬性是和整個類相關的屬性 ,通過類名來訪問 用來定義單例的時候使用比較多
static var courseCount : Int = 0
}
let stu = Student()
stu.age = 10
stu.name = "劉德華"
stu.Sex = "man"
stu.mathScore = 80.0
stu.chineseScore = 90.0
// 可選綁定
if let name = stu.name {
print(name)
}
let avergScore = (stu.mathScore + stu.chineseScore) * 0.5
let aver = stu.getAverageScore()
stu.averageScore
Student.courseCount = 2 // 使用類名訪問類屬性 Student.age 是不支持的 這樣寫就錯誤了
使用KVO監聽類的屬性的變化
在OC中我們可以重寫set方法來監聽屬性的改變,Swift中可以通過屬性觀察者來監聽和響應屬性值的變化。通常是監聽存儲屬性和類屬性的改變(對于計算屬性,我們不需要定義屬性觀察者,因為我們可以在計算屬性的setter中直接觀察并響應這種值的變化)。
我們通過設置以下觀察方法來定義觀察者
willSet:在屬性值被存儲之前設置。此時新屬性值作為一個常量參數被傳入。該參數名默認為newValue,我們可以自己定義該參數名。
didSet:在新屬性值被存儲后立即調用。與willSet相同,此時傳入的是屬性的舊值,默認參數名為oldValue。
willSet與didSet只有在屬性第一次被設置時才會調用,在初始化時,不會去調用這些監聽方法。
KVO監聽