码迷,mamicode.com
首页 > 其他好文 > 详细

二十、协议 Protocols

时间:2015-02-04 12:40:37      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

1. 概述

协议只提供方法的声明,不提供实现。协议可以被类、结构体和枚举实现。

 

2. 协议的语法 Protocol Syntax

定义一个协议:

    protocol SomeProtocol {
      // protocol definition goes here
    }

如果一个类有某个父类或是需要遵守某个协议,将父类或协议写在冒号后面:

    class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
      // class definition goes here
    }

 

3. 属性的要求 Property Requirements

 

4. 方法的要求 Method Requirements

协议中方法的参数不能有默认值。

在协议中,用 class 表示类方法,用 static 表示结构体方法和枚举方法(静态方法)。

    protocol SomeProtocol {
      class func someTypeMethod()
    }

比如,在协议中定义一个实例方法:

    protocol RandomNumberGenerator {
      func random() -> Double
    }

LinearCongruentialGenerator 实现了上面的协议:

    class LinearCongruentialGenerator: RandomNumberGenerator {
      var lastRandom = 42.0
      let m = 139968.0
      let a = 3877.0
      let c = 29573.0
      func random() -> Double {
        lastRandom = ((lastRandom * a + c) % m)
        return lastRandom / m
      }
    }
    let generator = LinearCongruentialGenerator()
    println("Here‘s a random number: \(generator.random())")
    // prints "Here‘s a random number: 0.37464991998171"
    println("And another one: \(generator.random())")
    // prints "And another one: 0.729023776863283"

 

5. 可变方法的要求 Mutating Method Requirements

十、方法 Methods我们知道,在值类型(结构体和枚举)中,如果如果方法想要修改自己的那个实例,需要定义为 mutating 类型。

如果某个协议中的方法,需要修改实现了这个协议的实例的值,应该将方法定义为mutating 类型。这就是的实现了这个协议的枚举和结构体可以修改自己的实例本身。

注意:在类中,不需要写mutating关键字,mutating关键字为值类型专用。

定义一个协议:

    protocol Togglable {
      mutating func toggle()
    }

值类型OnOffSwitch 需要实现这个协议:

    enum OnOffSwitch: Togglable {
      case Off, On
      mutating func toggle() {
        switch self {
          case Off:
            self = On
          case On:
            self = Off
        }
      }
    }
    var lightSwitch = OnOffSwitch.Off
    lightSwitch.toggle()
    // lightSwitch is now equal to .On

 

6. 构造器的需求 Initializer Requirements

 

二十、协议 Protocols

标签:

原文地址:http://www.cnblogs.com/actionke/p/4271933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!