美文网首页
类 协议 代理设计模式

类 协议 代理设计模式

作者: 摇耳朵的小布丁i | 来源:发表于2016-11-18 15:52 被阅读0次

    import Foundation

    //类:具有相同特征和行为的事物的抽象

    //根据类创建的实例就是:对象

    //类的创建格式

    /*

    class 类名: 父类 {

    属性

    行为

    }

    */

    //人类:Person 属性:姓名 年龄 性别 行为:吃饭 睡觉

    //NSobject 也是Swift中所有类的根类(基类)

    class Person: NSObject {

    //属性

    //方案一 直接给初始值

    //swift中不允许非可选类型的属性不赋初始值

    //  var name: String = ""

    //方案二在初始化方法中,给属性赋值

    //    var name:String

    //    init(name:String) {

    //        self.name = name

    //    }

    //方案三 定义成可选类型

    // var name:String?

    //方案四(定义成隐式解析类型 最常用)

    var name:String!

    var age:Int!

    var gender:String!

    //类型属性

    static var color:String!

    //提供一个快速创建对象的初始化方法

    init(name:String,age:Int,gender:String) {

    self.name = name

    self.age = age

    self.gender = gender

    }

    //行为(方法)

    func eat()  {

    print("男人吃吧吃吧不是罪")

    }

    func sleep() {

    print("好好睡觉 天天向上")

    }

    //类方法

    static func dadoudou(){

    print("打豆豆")

    }

    }

    //创建一个对象

    let p = Person(name: "男哥", age: 16, gender: "女")

    print(p.name,p.age,p.gender)

    p.eat()

    p.sleep()

    //访问类属性

    Person.color = "黄色"

    print(Person.color)

    //调用类方法

    Person.dadoudou()

    class Student: Person {

    var number:Int!

    func study()  {

    print("过四级")

    }

    //重写从父类继承过来的方法

    override func eat() {

    super.eat()

    print("吃满汉全席")

    }

    }

    let stu = Student(name: "景甜", age: 25, gender: "女")

    stu.number = 11011

    stu.study()

    print(stu.name,stu.age,stu.gender)

    stu.eat()

    stu.sleep()

    // 协议  代理设计模式

    //oc下的协议

    @objc protocol GirlDelegate{

    //协议中只写函数的声明

    func makeMoney() //必须实现的方法

    //选择实现的方法

    @objc optional func wish()

    @objc optional func cook()

    @objc optional func doHousework()

    }

    class Girl: NSObject {

    //设置代理属性

    var delegate:GirlDelegate!

    //女孩想买东西

    func buySomething() {

    //,男朋友挣钱

    self.delegate.makeMoney()

    }

    //女孩饿了

    func hungry(){

    //男朋友做饭

    self.delegate.cook!()

    }

    //女孩有脏衣服

    func youzangyifu(){

    //男朋友洗衣服

    self.delegate.wish!()

    }

    //女孩家里脏了

    func clearHome(){

    //男孩做家务

    self.delegate.doHousework!()

    }

    }

    //遵循协议

    class Boy : NSObject, GirlDelegate {

    func makeMoney() {

    print("一天1000块")

    }

    func cook() {

    print("法式小甜点")

    }

    func wish() {

    print("手洗")

    }

    func doHousework() {

    print("找保洁")

    }

    }

    let nanGe = Girl()

    let LiYiFeng = Boy()

    //给代理属性赋值

    nanGe.delegate = LiYiFeng

    //男哥发号指令

    nanGe.buySomething()

    nanGe.hungry()

    nanGe.youzangyifu()

    nanGe.clearHome()

    /*

    代理设计模式的步骤

    1.设计协议

    2.设置代理属性

    3.遵循协议

    4.实现协议中的方法

    5.在外界指定代理属性(给代理属性赋值)

    6.告诉代理对象什么时候干活

    */

    /*作业:制定一个保姆的协议

    {

    做家务

    做饭

    照顾孩子

    }

    设计Hostess 发出协议

    设置保姆类  遵循协议

    */

    /*

    @objc protocol HostessDelegate{

    func doHousework()

    @objc optional func cook()

    @objc optional func lookafterBaby()

    }

    class Hostess:NSObject{

    //设置代理属性

    var delegate:HostessDelegate!

    //Rose家里脏了

    func jializangle(){

    //Lady做家务

    self.delegate.doHousework()

    }

    //Rose饿了

    func hungry(){

    //Lady 做饭

    self.delegate.cook!()

    }

    //Rose孩子哭了

    func babyCry(){

    //Lady看孩子

    self.delegate.lookafterBaby!()

    }

    }

    //遵循协议

    class Boonne:NSObject,HostessDelegate {

    func doHousework() {

    print("做家务")

    }

    func cook(){

    print("做饭")

    }

    func lookafterBaby() {

    print("看孩子")

    }

    }

    //给代理属性赋值

    let Rose = Hostess()

    let Lady = Boonne()

    Rose.delegate = Lady

    Rose.jializangle()

    Rose.hungry()

    Rose.babyCry()

    */

    //Swift中协议格式,协议中的方法都是必须实现的

    //1.定义协议

    protocol HostessDelegate {

    func doHousework()

    func cook()

    func takeCareBaby()

    }

    //2.定义代理属性

    class hostess: NSObject {

    var delegate:HostessDelegate!

    //6.通知代理什么时候干活

    func cleanHome(){

    self.delegate.doHousework()

    }

    func hungry(){

    self.delegate.cook()

    }

    func working(){

    self.delegate.takeCareBaby()

    }

    }

    //给NSobject扩充方法

    extension NSObject {

    func sayHellow() {

    print("你好,集宁师范")

    }

    }

    class Nanny: NSObject {

    }

    let n = Nanny()

    n.sayHellow()

    //延展:用来扩充一个类,主要用来管理类的方法,或遵循某个协议中的方法

    //3.遵循协议

    extension Nanny : HostessDelegate{

    //4.实现协议中的方法

    func doHousework() {

    print("做家务")

    }

    func cook() {

    print("做饭")

    }

    func takeCareBaby() {

    print("照顾小孩")

    }

    }

    let cuiHua = hostess()  //女主人

    let ruHua = Nanny()  //保姆

    //5给代理属性赋值

    cuiHua.delegate = ruHua

    cuiHua.cleanHome()

    cuiHua.working()

    相关文章

      网友评论

          本文标题:类 协议 代理设计模式

          本文链接:https://www.haomeiwen.com/subject/uvfspttx.html