14.類的基本定義,類型推斷、安全和類型轉換

/*

類的基本定義

Swift中的結構體和類非常相似, 但是又有不同之處

類是具有相同屬性和方法的抽象

格式:

class 類名稱 {

    類的屬性和方法

}

*/

class Rect {

    var width:Double = 0.0

    var height:Double = 0.0

    func show() -> Void{

        print("width = \(width) height = \(height)")

    }

}

// 類沒有逐一構造器

//var r1 = Rect(width: 10.0, height: 10.0)

var r1 = Rect()

r1.show()

var r2 = r1

r2.show()

// 類是引用類型, 結構體之間的賦值其實是將r2指向了r1的存儲控件, 所以他們是兩個只想同一塊存儲空間, 修改其中一個會影響到另外一個

r1.width = 99

r1.show()

r2.show()



/*

恆等運算符, 用於判斷是否是同一個實例, 也就是是否指向同一塊存儲空間

=== !==

*/

var r3 = Rect()

if r1 === r3

{

    print("指向同一塊存儲空間")

}


第二、類的定義

import UIKit


class Student : NSObject {

    // 1.屬性

    // 1> 存儲屬性

    // 注意一:在開發中,如果是對象或者結構體,在沒有賦值的情況下通常定義爲可選類型

    var name : String?

    // 注意二:在開發中,如果是基本屬性類型,比如int類型,在沒有賦值的情況下,通常直接給一個默認的值0

    var age : Int = 0

    

    var chineseScore : Double = 0.0

    var mathScore : Double = 0.0

    

    // 2> 計算屬性

    /*

    var average : Double {

        get {

            return (chineseScore + mathScore) * 0.5

        }

        

        // 較少寫set方法(默認情況下,set方法中有一個系統變量:newValue.新傳入的值就再newValue)

        set {

            self.average = newValue

        }

    }

    */

    

    // 如果計算屬性是一個只讀屬性,則可以省略get{}

    var average : Double {

        return (chineseScore + mathScore) * 0.5

    }

    

    // 3> (瞭解)類屬性

    // 注意:

    // * 類屬性用static修飾

    // * 類屬性只能通過類來訪問

    static var courseCount = 0

}


// 創建類的對象

let stu : Student = Student()

stu.name = "yz"

stu.age = 11

stu.chineseScore = 61.5

stu.mathScore = 97.8


if let tempName = stu.name {

    print("name is \(stu.name!), age is \(stu.age), 語文成績:\(stu.chineseScore), 數學成績:\(stu.mathScore)")

}


// 獲取yz老師的平均成績

print(stu.average)


Student.courseCount = 2

print(Student.courseCount)



class Person : NSObject {

    var name : String?

    var age : Int = 0

    var height : Double = 0.0

}


let p = Person()


// 注意:賦值不是調用set方法,直接拿到屬性給屬性賦值

p.name = "why"

p.age = 18

p.height = 1.88


第三、類型轉換

/*

Swift不允許隱式類型轉換, 但可以使用顯示類型轉換(強制類型轉換)

OC:

int intValue = 10;

double doubleValue = (double)intValue;


Swift:

*/

var intValue:Int = 10

var doubleValue:Double

doubleValue = Double(intValue)

// 注意:Double()並不會修改intValue的值, 而是通過intValue的值生成一個臨時的值賦值給doubleValue

print(intValue)

print(doubleValue)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章