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

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

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

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

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

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

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

好了,具体代码看下面:

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

委托人

//
//  Mother.swift
//  1.Swift 委托代理设计模式-寻人启事
//
//  Created by AsTryE on 14-6-19.
//  Copyright (c) 2014年 TTAsTryE. All rights reserved.
//
import Foundation
class 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 Foundation
protocol 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 Foundation
class 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 Foundation
var mother = Mother(_sex: "女", _name: "红红")
var mark = Person(_sex: "男", _name: "打工仔")
// 设置代理
mother.delegate = mark
// mother 开始寻找 她的 小红
mother.lookingforChild("小红")

// 换一个 寻找 小明
mother.lookingforChild("小明")

运行图


点击下载完整Demo





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值