【Swift】 委托代理设计模式- 寻人启事

来源:互联网 发布:nginx实现会话保持 编辑:程序博客网 时间:2024/05/17 23:17

Protocol(协议)用于统一方法和属性的名称,而不实现任何功能。协议能够被类,枚举,结构体实现,满足协议要求的类,枚举,结构体被称为协议的遵循者。 

遵循者需要提供协议指定的成员,如属性,方法,操作符,下标等。
protocol SomeProtocol {     // 协议内容}

这是简单的定义,更多相关与协议的语法请看 The Swift Programming Language中文完整版(CocoaChina精校) 

该电子书讲得再详细不过了,这里只是一个简单的例子!

Swift中,开发者可以采用Objective-C中定义好的协议。和Swift协议一样,所有Objective-C协议都写在一个用逗号隔开的列表中,跟在所在类的父类名后面(如果它有父类的话)。 

SWIFTclass MySwiftViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {// 定义类 }

好了,具体代码看下面:

三要素: 一份协议,委托者,代理人 

委托人

////  Mother.swift//  1.Swift 委托代理设计模式-寻人启事////  Created by AsTryE on 14-6-19.//  Copyright (c) 2014年 TTAsTryE. All rights reserved.//import Foundationclass Mother {    var sex: String?    var name: String?    init(_sex: String!, _name: String!) {        sex = _sex        name = _name    }        var delegate: ChildDelegate?    func lookingforChild(name: String!) {        println("我在找我的孩子:\(name),找到了给你500万!")        // 委托 委托人帮她找孩子,不管了,找到了,委托人会自己通知她的        if let cName = delegate?.lookForMyChild(name) {            if cName == "OK" {                self.thankyou()            } else {                println("哦,天呐,竟然没有找到我的孩子,去哪了呢?")            }        }    }        func thankyou() {        println("谢谢你帮我找到了孩子,一定会给你报酬的!")    }}

协议类

////  ChildDelegate.swift//  1.Swift 委托代理设计模式-寻人启事////  Created by AsTryE on 14-6-19.//  Copyright (c) 2014年 TTAsTryE. All rights reserved.//import Foundationprotocol ChildDelegate {    var age: Int? { get set }    class func thankyousomuch() -> Void    func lookForMyChild(name: String) -> String}

代理人

////  Person.swift//  1.Swift 委托代理设计模式-寻人启事////  Created by AsTryE on 14-6-19.//  Copyright (c) 2014年 TTAsTryE. All rights reserved.//import Foundationclass Person: ChildDelegate{    var age: Int?    var sex: String?    var name: String?    var childName: String[]        init(_sex: String!, _name: String!) {        sex = _sex        name = _name        // 孤儿院        childName = ["小明", "小海", "笑笑", "小伙", "小米", "小胖", "消消", "小乐", "小秘", "校花"]    }        class func thankyousomuch() {            }        // 找孩子的代理方法    func lookForMyChild(name: String) -> String {        // 这里在孤儿院里面开始 寻找 指定名称的孩子        for child : String in childName {            if name == child {                return "OK"            }        }        return "not found"    }}

main.swift

////  main.swift//  1.Swift 委托代理设计模式-寻人启事////  Created by AsTryE on 14-6-19.//  Copyright (c) 2014年 TTAsTryE. All rights reserved.//import Foundationvar mother = Mother(_sex: "女", _name: "红红")var mark = Person(_sex: "男", _name: "打工仔")// 设置代理mother.delegate = mark// mother 开始寻找 她的 小红mother.lookingforChild("小红")// 换一个 寻找 小明mother.lookingforChild("小明")

运行图


点击下载完整Demo





0 0