日常隨筆第十彈-類/協議/拓展

1. 成員與類的權限

  • 權限:internal/pravite/public
  • 默認為internal:在當前應用或模塊可見
  • pravite: 在當前文件中使用
  • public: 在其他地方都可見
  • 成員的權限不能超過類的權限

2. 類的封裝

class hummen {//封裝
    var name : String = ""
    var age : UInt = 0
    private var weight : Double = 0
    var height : Double = 0
}


var p3 = people()
p3.name = "李雪"
print(p3.name)

var p4 = p3
p4.height = 34
print(p4.height, p4.name)

class tangle {//可定義存儲屬性,也可定義計算屬性
    var height : Double = 0
    var weight : Double = 0
    var name : String!{
    willSet(value){//儲存屬性
            print("將\(name)設置為:(value)")
        }
    didSet{
            print("已經設置為:\(name)")
        }
    }
    var area:Double{//計算屬性
        set{
            height = sqrt(newValue)
            weight = sqrt(newValue)
        }
        get {
            return height * weight
        }
        //return height * weight
    }
    func same()  {
        print("this is the same")
    }
}

var t1 = tangle()
t1.height = 24
t1.weight = 5

t1.name = "張三"

print(t1.area)

3. 類的繼承

  • swift中類的繼承是單繼承,只有一個父類,也可以沒有父類
  • 可繼承父類中所有的成員和方法
  • 也可以重新構造父類的方法
class rectangle: tangle {//繼承tangle
    var width : Double = 0
    func diffrent() {
        print("this is diffrent")
    }
    override func same() {//重新構造父類的方法,需添加關鍵字override
        print("this the same")
    }
}
var re1 = rectangle()
re1.diffrent()
re1.same()

var re2 : tangle//聲明為tangle類
re2 = rectangle()//re2實際為rectangle類,但是還是tangle類
var re3 = re2 as! rectangle//將re2強制轉換為rectangle類
re2.same()
re3.diffrent()

4. 類的協議與擴展

4.1 協議的作用

  • 將不同父類的類通過一些描述特征將其歸為一類進行管理

協議的定義

protocol extra {
    func condition()
}

協議的實現

class Clothes : extra{
    func condition() {
        print("Cloth is dry~")
    }
}

4.2 擴展的作用

  • 將已有的類型進行添加功能或是方法,也可以添加類的功能
  • 不能創建存儲屬性,只能創建計算屬性

//也可以給類添加功能,“類型”沒有局限
extension Int{//給已有類型添加功能,擴展Int類型中的某些功能,包括方法
    //var i = 123//不能創建存儲屬性,只能是計算屬性
    var i : Int{
        return self * 2
    }
    func InfoPrint(number : Int, number1 :Int) -> Int {
        return number * self + number1
    }
}
var s = 123
print(s.i, s.InfoPrint(3, number1: 4))
extension Clothes {
    func condition() {
        print("Cloth is dry~")
    }
}

5. 計算符重載

  • 重新定義計算符,使其能在特定的函數中實現符號的功能
func 符號()->類型{}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容