/**
* 類
*/
// 類的格式: class 關鍵字 + 類名 {類的實現(xiàn)} class Person { // 在類里面創(chuàng)建一個屬性的時候, 必須有初值, 如果不想設置初值, 那么就設置成為可選類型 var name : String? = nil var age : Int? = nil // private 表示私有屬性 private var sex : String? = nil // static 修飾的屬性表示類 屬性 static var country : String? = nil
// init(name newName : String, age newAge : Int) { // self.name = newName // self.age = newAge // } init(name : String, age : Int) { self.name = name self.age = age } // 實例方法里面不能直接調(diào)用類屬性 // 實例方法可以直接對實例對象進行修改賦值 // 在函數(shù)聲明之前添加一個private 表示私有方法 private func sayHi() { self.sex = "女" print(self.sex) } // static 修飾的是類方法 // static 修飾的方法是不可以被子類重寫的 static func sayHello() { self.country = "中國" print(self.country) } // class 修飾的也是類方法 // class 修飾的類方法可以被子類重寫 class func sayGood() { self.country = "天朝" print(self.country) } }
let person : Person = Person.init(name: "好的", age: 10)
person.sayHi() Person.sayHello()
class Student: Person { var person : Person? = nil var number : Int? = nil // 如果子類想重寫父類的方法, 需要添加override修飾 override init(name: String, age: Int) { super.init(name: name, age: age) } override class func sayGood() { self.country = "天朝" print(self.country) } }
/**
* 協(xié)議
*/
// 格式 protocol 關鍵字 + 協(xié)議名字 protocol myDelegate { // 協(xié)議方法前面添加mutating修飾的關鍵字,在結構體內(nèi)部可以修改結構體的 mutating func hh() } // 如果有需要可選實現(xiàn)的協(xié)議 // 在最前面加上@objc 修飾, 內(nèi)部實現(xiàn)方法用optional修飾可選實現(xiàn)方法, 其他不變 @objc protocol newDelegate { optional func llll() }
// 如果一個類既有父類 也遵守了某個協(xié)議, 那么格式是 // class + 類名: 父類, 協(xié)議名字 //class Teacher1: Person, myDelegate, newDelegate { // func hh() { // // } //}
// 結構體可以遵守協(xié)議 // 但結構體只能遵守Swift的協(xié)議 struct supperMan : myDelegate { var name : String mutating func hh() { self.name = "sdf" } } // extension 可以給一個類擴展新的協(xié)議 extension Person : myDelegate { func hh() { }
// extension 不可以添加新的屬性 // var height : Float? = nil // 可以給一個類添加新的函數(shù) func wang() { } }
extension Frame : myDelegate { func hh() { } }