寫了12個Person來複習,不過完成一樣的代碼須要敲鍵盤的次數相比OC確實少了不少,這不少應該歸功於Swift中不寫分號,以及少了OC中的中括號。java
1、類與結構體數組
二者在Swift中差不了多少了函數
類與結構體有不少相同的地方: (第2,3點是其餘語言中不存在的)spa
1)均可以定義屬性/方法/下標(結構體也能夠定義方法了).net
2)都能初始化(經過構造方法)code
3)都能使用擴展(extension)與協議(protocol)對象
4)類與結構體(枚舉)中的全局屬性/方法:在類中用class關鍵字,但在結構體中用staticblog
類比結構體多的功能:繼承
1)能繼承ip
2)運行時能檢查類對象的類型
3)析構釋放資源
4)引用計數容許一個類實例有多個引用
- class Person1{
- var name = "jack"
- }
-
- struct Person2{
- var age:Int
- }
-
- let p1 = Person1()
- let p2 = Person2(age: 10)
2、屬性(存儲屬性--計算屬性--類屬性)
2.1存儲屬性: 就是存儲一個常量或變量,相似Java中的成員變量
- class Person3{
- var name:String = "xuneng"
- var age:Int = 10
- let height = 175
- lazy var p1:Person1 = Person1()
- }
-
- var p3 = Person3()
- p3.name
- p3.age = 11
-
- println(p3.p1)
2.2計算屬性: 不直接存儲值,而是用get/set來作.可用來操做其餘屬性值的變化
get: 取, 用來封裝取值的過程
set: 設, 用來封裝設值的過程
- class Person4{
- var name:String = "jack"
- var jjLength:Int = 10
- var age:Int{
- get{
- return jjLength * 2
- }
- set(newAge){
- jjLength = newAge / 2
- }
- }
- }
- var p4 = Person4()
- p4.age = 10
2.2.1 簡便的計算屬性寫法
- class Person5{
-
- var jjLength:Int = 10
- var age:Int{
- get{
- return jjLength * 2
- }
- set{
- jjLength = newValue / 2
- }
- }
-
-
- var height:Int{
- get{
- return jjLength * 4
- }
- }
-
- var height2:Int{
- return jjLength * 4
- }
- }
-
- var p5 = Person5()
- p5.height
2.2.2 注意計算屬性的死循環狀況
計算屬性的值是不固定的,所以不能用let修飾,只能用var
計算屬性不能直接賦值
- class Person6{
-
- var jjLength:Int = 10
-
-
- var age:Int{
- get{
- return age
- }
- set{
- age = newValue
- }
- }
- }
2.3 類屬性(或者叫作類型屬性)用class關鍵字修飾.類屬性只能是計算屬性.
類屬性就是相似java中static修飾的屬性.一個類只有一份,且多個實例對象共享.可直接用類名調用
- class Person7{
- class var name:String{
- return "xuneng"
- }
- }
- Person7.name
2.4 屬性監視器: 可用來監視屬性變化的2個方法willSet, didSet
計算屬性由於有get和set方法,所以監視器其實對計算屬性沒多大用處.對存儲屬性用處大
初始化值時, 不會調用willSet與didSet
willSet, didSet和set, get不能共存
- class Person8{
- var name:String = "xuneng"{
- willSet{
- println("新值爲:\(newValue)")
- }
- didSet{
- println("新值爲:\(oldValue)")
- }
- }
- }
- var p8 = Person8()
- p8.name = "jack"
3、函數與方法
3.1 對象方法
類中的方法與函數的一點區別: 方法的第一個參數之後,全是外部參數.名字即爲參數名
- class Person9{
- func sum(num1:Int , num2:Int){
- println(num1 + num2)
- }
- }
- var p9 = Person9()
- p9.sum(10, num2: 10)
3.2 類方法. 用class修飾
- class Person10{
- class func sum(num1:Int , num2:Int){
- println(num1 + num2)
- }
- }
- Person10.sum(10, num2: 10)
3.3 self與super, 與OC相同
- class Person11{
- func sum(num1:Int , num2:Int){
- self.fun()
- }
-
- func fun(){
- println("hello")
- }
- }
4、下標(附屬腳本)
下標, 有的叫附屬腳本(subscript), 新東西。
能夠定義在 類/結構體/枚舉中,進行快速訪問。
- struct Person12{
- let jjLength:Int
-
- subscript(index:Int) -> Int{
- return jjLength * index
- }
- }
-
- var p12 = Person12(jjLength: 10)
- p12[3]