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