美文网首页Swift开发iOS开发iOS学习笔记
Swift学习_协议2与代理模式

Swift学习_协议2与代理模式

作者: CN_HarrySun | 来源:发表于2017-07-20 18:15 被阅读19次
Swift

1.协议的继承

protocol Animal{
    
    // 腿和翅膀属性,包括get和set方法
    var leg:String{get set}
    var wing:String{get set}
    // 描述方法,返回的是字符串
    func description() -> String
}

protocol Fish:Animal {
    
    // 习惯属性,带有get和set
    var habit:String{get set}
}

// Goldfish类采纳Fish协议
class Goldfish:Fish{
    
    var name:String
    // 实现Fish的协议
    var habit: String
    
    // 实现Animal协议
    var leg: String
    var wing: String
    func description() -> String {
        
        return "name:\(name),wing:\(wing),leg:\(leg),habit:\(habit)"
    }
    
    // 构造函数
    init(name:String,habit:String,leg:String,wing:String){
        
        self.name = name
        self.habit = habit
        self.leg = leg
        self.wing = wing
    }
}

var goldfish = Goldfish(name:"fish",habit:"喜欢水",leg:"没有腿",wing:"没有翅膀")
print(goldfish.description())

2.检查协议的一致性

使用is操作符检查实现实例是否采纳了某个协议
使用as操作符把实例类型转换到指定协议类型

protocol Area{
    
    var area:Double{get}
}

// 定义采纳Area协议的类Rectangle
class Rectangle:Area{
    
    let long:Double
    var area: Double{return long * long}
    init(long:Double) {
        
        self.long = long
    }
}

// 定义采纳了Area协议的类Circle
class Circle:Area{
    
    let pi = 3.1415926
    var radius:Double
    var area: Double{return pi * radius * radius}
    
    init(radius:Double){
        self.radius = radius;
    }
}

// 定义了没有采纳Area协议的类Bird
class Bird{
    
    var wing:Int
    init(wing:Int){
        self.wing = wing
    }
}

// 定义AnyObject类型的数组
let objects:[AnyObject] = [Circle(radius:2.0),Rectangle(long:2.0),Bird(wing:2)]

for object in objects {
    
    if let objectWithArea = object as? Area{
        
        print("面积是:\(objectWithArea.area)")
    }else{
        
        print("没有面积")
    }
}

3.代理模式

代理是一种设计模式,它允许类或者结构体将自身负责的功能委托给其他类型的实例去实现。

// 定义一个协议GetFile
protocol GetFileDelegate{
    
    func take() -> String           // 协议方法
}

// 定义Assistant类,采用GetFile协议
class Assistant:GetFileDelegate{
    
    func take() -> String {
        
        return "助理给老板拿文件"
    }
}

// 定义一个Boss类,它有一个代理属性
class Boss{
    
    var delegate:GetFileDelegate?        // 声明代理属性,用来响应代理方法
    init(man:GetFileDelegate) {
        
        delegate = man
    }
    func take() -> String {
        
        return delegate!.take()  // 实现代理的方法
    }
}

let assistant = Assistant()
let boss = Boss(man:assistant)
print(boss.take())

协议2结果输出
代码已上传至git:
--> 传送门:Swift_基本语法

附录

查看完整专栏《Swift学习》

有问题欢迎指正以及相互探讨 —— CoderSun

相关文章

  • Swift学习_协议2与代理模式

    1.协议的继承 2.检查协议的一致性 使用is操作符检查实现实例是否采纳了某个协议使用as操作符把实例类型转换到指...

  • Swift超基础语法(协议与代理篇)

    代理设计模式是开发中比较常见的设计模式之一,那么在Swift中应该如何实现代理与协议呢? 协议(protocol)...

  • Swift之代理模式

    总结一下Swift代理模式的实现 首先定义一个协议,并在协议下常见实现的action 创建代理的实例 调用代理方法...

  • Swift代理协议的安全使用

    文章 Swift代理协议的安全使用 概述 在Swift下,使用代理协议,并且检验代理对象的存在和协议函数是否被实现...

  • Swift3.0 Delegate和Block的实现

    Swift3.0 中代理的使用方法一、声明协议1.制定协议 2.用weak定义代理 3.判断代理是否存在,让代理去...

  • Swift代理

    一、swift代理如何使用?1.定义协议&代理变量&调用代理方法: 2.遵循代理&重写代理方法 二、如果有些代理方...

  • oc程序员学习swift(二)- 协议代理使用

    swift协议代理的使用跟oc的协议代理差不套多,不过语法上还是有不小的区别。swift使用协议的关键字:...

  • 《Swift进阶》ReadingNotes_8

    协议 1.swift中的协议,可以直接被用作代理,也可以对接口进行抽象。2.与OC中的协议最大的不同是它可以让结构...

  • 代理模式

    代理模式 代理与协议 用NSProxy实现代理模式 代理模式的基本原理代理模式实际上就是一个对象和另外一个对象的耦...

  • iOS关于代理模式的理解

    代理模式是一种消息传递模式 包括:协议、委托对象、代理对象 协议:用来指定代理双方需要做的事情 委托对象:根据协议...

网友评论

    本文标题:Swift学习_协议2与代理模式

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