协议是为方法、属性等定义一套规范,没有具体的实现。

协议能够被类、结构体等具体实现(或遵守)。

  1. protocol SomeProtocol {
  2. // protocoldefinition goes here
  3. }
  4. struct         SomeStructure:            FirstProtocol, AnotherProtocol {
  5. // structure definition goes here}
  6. class  SomeClass:    SomeSuperclass,     FirstProtocol, AnotherProtocol {
  7. // class definitiongoeshere
  8. }

属性

1. set 和 get 访问器

  1. protocol SomeProtocol {
  2. var mustBeSettable:Int { get set }
  3. var doesNotNeedToBeSettable: Int { get }
  4. }

2.静态属性

  1. protocol AnotherProtocol {
  2. class var someTypeProperty: Int { get set }
  3. }

3.只读

  1. protocol FullyNamed {
  2. var fullName: String { get }
  3. }

实例:

  1. struct Person: FullyNamed {
  2. varfullName: String
  3. }
  4. letjohn= Person(fullName: "John Appleseed")
  5. class Starship: FullyNamed {
  6. varprefix: String?
  7. varname: String
  8. init(name: String, prefix: String? = nil) {
  9. self.name = name self.prefix = prefix
  10. }
  11. varfullName: String {
  12. return (prefix ? prefix!+ " " :"")+ name
  13. }
  14. }
  15. varncc1701 = Starship(name: "Enterprise",prefix: "USS")

方法

1.定义方法

  1. protocol RandomNumberGenerator{
  2. func random() -> Double
  3. }

2.定义静态方法

  1. protocolSomeProtocol {
  2. class func someTypeMethod()
  3. }

实例:

  1. protocol RandomNumberGenerator{
  2. funcrandom() -> Double
  3. }
  4. class                   LinearCongruentialGenerator:RandomNumberGenerator {
  5. var lastRandom= 42.0let m = 139968.0
  6. let a = 3877.0 let c = 29573.0
  7. funcrandom() -> Double {
  8. lastRandom = ((lastRandom * a + c) %m)
  9. returnlastRandom / m
  10. }
  11. }
  12. let generator= LinearCongruentialGenerator()
  13. println("Here's       a        random         number:
  14. \(generator.random())")
  15. //    prints    "Here's     a     random       number:0.37464991998171"
  16. println("And another one: \(generator.random())")
  17. //prints "And another one: 0.729023776863283"

把协议作为类型使用

  1. protocol RandomNumberGenerator {
  2. func random() -> Double}
  3. class LinearCongruentialGenerator: RandomNumberGenerator {
  4. varlastRandom= 42.0 let m =139968.0
  5. let a = 3877.0 letc = 29573.0
  6. func random() -> Double {
  7. lastRandom = ((lastRandom * a + c) %m)
  8. return lastRandom / m
  9. }
  10. }
  11. class Dice {
  12. letsides: Int
  13. let generator: RandomNumberGenerator
  14. init(sides: Int, generator: RandomNumberGenerator) {
  15. self.sides = sidesself.generator = generator
  16. }
  17. func roll() -> Int{
  18. return Int(generator.random() * Double(sides)) + 1
  19. }
  20. }
  21. vard6 = Dice(sides: 6, generator: LinearCongruentialGenerator())
  22. for_ in 1...5 {
  23. println("Randomdiceroll is \(d6.roll())")
  24. }

Swift交流讨论论坛论坛:http://www.cocoagame.net

欢迎加入Swift技术交流群:362298485

Swift协议(Protocol)的更多相关文章

  1. Swift 协议protocol

    // associatedtype 关键字 用来声明一个类型的占位符作为协议定义的一部分 protocol LXFViewModelType { associatedtype Input associ ...

  2. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器

    1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...

  3. iOS阶段学习第19天笔记(协议-Protocol)

    iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者      之间通讯的一种方式 2) ...

  4. OC基础--分类(category) 和 协议(protocol)

    OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低, ...

  5. 协议Protocol

    1.协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口.           遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议.       ...

  6. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

  7. 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...

  8. Objective-C中的协议(Protocol)和类别(Category)

    1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...

  9. Objective-C 中的协议(@protocol)和接口(@interface)的区别

    Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...

  10. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

随机推荐

  1. 数据库存取缓冲区的LRU与MRU算法

    数据库存取缓冲区的LRU与MRU算法 1.Cache Hit and Cache Miss 当使用者第一次向数据库发出查询数据的请求的时候,数据库会先在缓冲区中查找该数据,如果要访问的数据恰好已经在缓 ...

  2. PC/UVa 题号: 110104/706 LC-Display (液晶显示屏)题解

    #include <string> #include <iostream> #include <cstring> #include <algorithm> ...

  3. Diskpart挂载/卸载VHD

    #Diskpart挂载VHD $DriveLetter = "X"$VHD_File = "e:\vhd\test\win2008r2.vhdx"$Curren ...

  4. iterm2相关配置

    使用 iterm2 登陆 公司堡垒机 进行 上传 下载文件 等维护操作.. 1.需要安装iterm2 软件 http://iterm2.com/  下载安装 2.安装brew ruby -e &quo ...

  5. 使用VS2012 开发SharePoint 2013 声明式的action(activity) 综合实例

    本文讲述使用VS2012 开发SharePoint 2013 声明式的action 综合实例. 需求同: http://blog.csdn.net/abrahamcheng/article/detai ...

  6. hdu 4099 Revenge of Fibonacci 字典树+大数

    将斐波那契的前100000个,每个的前40位都插入到字典树里(其他位数删掉),然后直接查询字典树就行. 此题坑点在于 1.字典树的深度不能太大,事实上,超过40在hdu就会MLE…… 2.若大数加法时 ...

  7. Android 滑动效果进阶篇(五)—— 3D旋转

    前面介绍了利用Android自带的控件,进行滑动翻页制作效果,现在我们通过代码实现一些滑动翻页的动画效果. Animation实现动画有两个方式:帧动画(frame-by-frame animatio ...

  8. 检测到有潜在危险的 Request.Form

    今天在做一个.net的新闻发布器的时候. 遇到这样的一个问,在html编辑器里面加入图片提交的时候 就报一个 从客户端(content1="<img src="/web/ne ...

  9. Python学习 之 爬虫

    目标:下载贴吧或空间中所有图片 步骤:(1)获取页面代码 (2)获取图片URL,下载图片 代码如下: #!/usr/bin/python import re import urllib def get ...

  10. Android N分屏模式Activity生命周期的变化

    昨天Google发布了Android N Preview, balabala....我是用模拟器去验证的, 通过长按多任务窗口(口)进入分屏模式, 这里只进行了简单的测试, 不排除通过配置哪个参数, ...