1.主要內容
類的介紹和定義
類的屬性
類的構造函數-
2.類的介紹和定義
Swift也是一門面向對象開發(fā)的語言
面向對象的基礎是類,類產生了對象
在Swift中如何定義類呢?-
class是Swift中的關鍵字,用于定義類
class 類名 : SuperClass { // 定義屬性和方法 }
注意
定義的類,可以沒有父類.那么該類是rootClass
通常情況下,定義類時.繼承自NSObject(非OC的NSObject)
-
-
3.如何定義類的屬性
-
1.類的屬性介紹
Swift中類的屬性有多種- 存儲屬性:存儲實例的常量和變量
- 計算屬性:通過某種方式計算出來的屬性
- 類屬性:與整個類自身相關的屬性
-
2.存儲屬性
存儲屬性是最簡單的屬性,它作為類實例的一部分萍丐,用于存儲常量和變量
可以給存儲屬性提供一個默認值缕陕,也可以在初始化方法中對其進行初始化
-
下面是存儲屬性的寫法
age
和name
都是存儲屬性,用來記錄該學生的年齡和姓名
chinese
和math
也是存儲屬性,用來記錄該學生的語文分數和數學分數// 定義一個類 class Student : NSObject{ // 定義屬性 // 存儲屬性 var name:String? var age:Int = 0 var chinese:Double = 0.0 var math:Double = 0.0 } // 創(chuàng)建一個學生對象 let stu = Student() // 給儲存屬性賦值 stu.name = "王沖" stu.age = 25 stu.chinese = 98.5 stu.math = 115.6
-
3.計算屬性
- 1.計算屬性并不存儲實際的值通铲,而是提供一個getter和一個可選的setter來間接獲取和設置其它屬性
- 2.計算屬性一般只提供getter方法
- 3.如果只提供getter翘瓮,而不提供setter稿茉,則該計算屬性為只讀屬性,并且可以省略get{}
- 4.下面是計算屬性的寫法
1.averageScore是計算屬性,通過chineseScore和mathScore計算而來的屬性
-
2.在setter方法中有一個newValue變量,是系統(tǒng)指定分配的
class Student : NSObject { // 定義屬性 // 存儲屬性 var age : Int = 0 var name : String? var chineseScore : Double = 0.0 var mathScore : Double = 0.0 // 計算屬性 var averageScore : Double { get { return (chineseScore + mathScore) / 2 } // 沒有意義,因為之后獲取值時依然是計算得到的 // newValue是系統(tǒng)分配的變量名,內部存儲著新值 set { self.averageScore = newValue } } } // 獲取計算屬性的值 print(stu.averageScore)
-
4.類屬性
類屬性是與類相關聯的,而不是與類的實例相關聯
所有的類和實例都共有一份類屬性.因此在某一處修改之后,該類屬性就會被修改
類屬性的設置和修改,需要通過類來完成
-
下面是類屬性的寫法
類屬性使用static來修飾
courseCount是類屬性,用來記錄學生有多少門課程class sTudent : NSObject{ // 定義屬性 // 存儲屬性 var age : Int = 0 var name : String? var chineseSorce : Double = 0.0 var mathsorce : Double = 0.0 // 計算屬性 var averageSorce : Double { get { return (chineseSorce + mathsorce)/2.0 } // 沒有意義 newValue是系統(tǒng)分配的變量名掏导,內部存儲著新值 set{ return self.averageSorce = newValue } } // 類屬性 static var corseCount : Int = 0 } // 設置該類的屬性 sTudent.corseCount = 3 // 取出類屬性的值 print(sTudent.corseCount)
-
5.監(jiān)聽屬性的改變
在OC中我們可以重寫
set
方法來監(jiān)聽屬性的改變Swift中可以通過屬性觀察者來監(jiān)聽和響應屬性值的變化
通常是監(jiān)聽存儲屬性和類屬性的改變.(對于計算屬性享怀,我們不需要定義屬性觀察者,因為我們可以在計算屬性的
setter
中直接觀察并響應這種值的變化)-
我們通過設置以下觀察方法來定義觀察者
-
willSet
:在屬性值被存儲之前設置趟咆。此時新屬性值作為一個常量參數被傳入添瓷。該參數名默認為newValue
,我們可以自己定義該參數名 -
didSet
:在新屬性值被存儲后立即調用值纱。與willSet
相同鳞贷,此時傳入的是屬性的舊值,默認參數名為oldValue
-
willSet
與didSet
只有在屬性第一次被設置時才會調用虐唠,在初始化時搀愧,不會去調用這些監(jiān)聽方法
-
-
監(jiān)聽的方式如下:
監(jiān)聽age和name的變化
class Person : NSObject {var name1 : String? { // 可以newValue自定義名稱 willSet (new){ // 屬性即將改變,還未改變時會調用此方法 // 在該方法中還有一個系統(tǒng)默認的屬性newValue來存儲新值 print(name1!) print(new!) } // 可以給oldValue定義名稱 didSet (old) { // 屬性值已經改變了會調用該方法 // 在該方法中有一個默認的系統(tǒng)屬性oldValue,用于存儲舊值 print(name1!) print(old!) } } var age : Int = 0 var height : Double = 0.0 } let person : Person = Person() // 在賦值時監(jiān)聽該屬性的改變 // 在OC中重寫set方法 // 在swift可以給屬性添加監(jiān)聽器 person.name1 = "why" //p.name = "yz"
-
-
6.自己定義的一個類
/* *1.類的定義 *2.創(chuàng)建類對應的對象 *3.給類的屬性復制 --> 直接復制和通過kvc賦值 *4.可以重寫override func setValue(_ value: Any?, forUndefinedKey key: String) 那么字典沒有的字段可以在類中沒有對應的屬性 *5.override : 重寫,如果重寫的一個方法進行的重寫咱筛,那么必須在該方法前加上 override */ class person : NSObject{ var age : Int = 0 // override : 重寫搓幌,如果寫的某一個方法是對父類方法的重寫那么必須在該方法前加上 override override func setValue(_ value: Any?, forUndefinedKey key: String) { } } let p = person() p.setValuesForKeys(["age":19,"name":"joanking"]) print(p.age)
11.Swift中類的使用
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爵川,“玉大人敷鸦,你說我怎么就攤上這事∏薰保” “怎么了扒披?”我有些...
- 正文 為了忘掉前任价说,我火速辦了婚禮,結果婚禮上风秤,老公的妹妹穿的比我還像新娘鳖目。我一直安慰自己,他們只是感情好缤弦,可當我...
- 文/花漫 我一把揭開白布领迈。 她就那樣靜靜地躺著,像睡著了一般碍沐。 火紅的嫁衣襯著肌膚如雪狸捅。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼鞍匾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骑科?” 一聲冷哼從身側響起橡淑,我...
- 正文 年R本政府宣布崭捍,位于F島的核電站尸折,受9級特大地震影響,放射性物質發(fā)生泄漏殷蛇。R本人自食惡果不足惜实夹,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粒梦。 院中可真熱鬧收擦,春花似錦、人聲如沸谍倦。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽昼蛀。三九已至宴猾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叼旋,已是汗流浹背仇哆。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 20- 枚舉,枚舉原始值,枚舉相關值,switch提取枚舉關聯值 Swift枚舉: Swift中的枚舉比OC中的枚...
- 斷斷續(xù)續(xù)終于看完了這本書由捎,這本書剛剛開始看的時候兔综,狠狠的“驚艷”了我一把,語言非常幽默狞玛,寓情理于故事中软驰,看起...
- 小時候碑隆,我特別希望長大,因為以我可見的事實蹬音,大孩子的零花錢總是很多上煤。當我成為大孩子后,卻發(fā)現大孩子的作業(yè)更多著淆,嘮叨...