原創文章,歡迎轉載。轉載請註明:關東昇的博客 php
類和結構體很是類似,不少狀況下沒有區別。若是你是設計人員在進行系統設計時候,是將某種類型設計成爲類仍是結構體? java
類和結構體異同:數組
類和結構體都有以下功能:微信
定義存儲屬性函數
定義方法網站
定義下標spa
定義構造函數.net
定義擴展設計
實現協議 code
只有類纔有的功能:
可以繼承另一個類
可以覈對運行期對象的類型
析構對象釋放資源
引用計數容許一個實例有多個引用
選擇的原則:
結構體是值類型,每個實例沒有獨一無二的標識,下面兩個數組實例本質上沒有區別,他們能夠互相替換。
var studentList1: [String] = ["張三","李四","王五"] var studentList2: [String] = ["張三","李四","王五"]
可是咱們提到類時候,它是引用類型,每一個實例都有獨一無二的標識。咱們看看下面員工Employee類代碼:
class Employee { var no = 0 var name = "" var job = "" var salary = 0.0 } var emp1 = Employee() emp1.no = 100 emp1.name = "Tom" emp1.job = "SALES" emp1.salary = 9000 var emp2 = Employee() emp2.no = 100 emp2.name = "Tom" emp2.job = "SALES" emp2.salary = 9000
emp1和emp2兩個員工實例即使內容徹底相同,可是這不能說明他們就是同一個員工,只是類似而已。每個員工實例的背後都有獨一無二的標識。
咱們再來看看部門Department結構體。
struct Department { var no: Int = 0 var name: String = "" } var dept1 = Department() dept1.no = 20 dept1.name = "Research" var dept2 = Department() dept2.no = 20 dept2.name = "Research"
Department爲何被設計成爲結構體而不是類呢,那要看咱們對於兩個不一樣部門的理解是什麼,若是具備相同的部門編號(no)和部門名稱(name),咱們就認爲他們是兩個相同的部門,那麼就能夠把Department定義爲結構體,這一點與員工Employee不一樣。
歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php