Swift初探之----------类,协议

/**
* 类
*/

// 类的格式: class 关键字 + 类名 {类的实现} class Person { // 在类里面创建一个属性的时候, 必须有初值, 如果不想设置初值, 那么就设置成为可选类型 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 } // 实例方法里面不能直接调用类属性 // 实例方法可以直接对实例对象进行修改赋值 // 在函数声明之前添加一个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) } }

/**
* 协议
*/

// 格式 protocol 关键字 + 协议名字 protocol myDelegate { // 协议方法前面添加mutating修饰的关键字,在结构体内部可以修改结构体的 mutating func hh() } // 如果有需要可选实现的协议 // 在最前面加上@objc 修饰, 内部实现方法用optional修饰可选实现方法, 其他不变 @objc protocol newDelegate { optional func llll() }

// 如果一个类既有父类 也遵守了某个协议, 那么格式是 // class + 类名: 父类, 协议名字 //class Teacher1: Person, myDelegate, newDelegate { // func hh() { // // } //}

// 结构体可以遵守协议 // 但结构体只能遵守Swift的协议 struct supperMan : myDelegate { var name : String mutating func hh() { self.name = "sdf" } } // extension 可以给一个类扩展新的协议 extension Person : myDelegate { func hh() { }
// extension 不可以添加新的属性 // var height : Float? = nil // 可以给一个类添加新的函数 func wang() { } }

extension Frame : myDelegate { func hh() { } }

你可能感兴趣的:(Swift初探之----------类,协议)