Swift协议(Protocol)
协议是为方法、属性等定义一套规范,没有具体的实现。
协议能够被类、结构体等具体实现(或遵守)。
- protocol SomeProtocol {
- // protocoldefinition goes here
- }
- struct SomeStructure: FirstProtocol, AnotherProtocol {
- // structure definition goes here}
- class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
- // class definitiongoeshere
- }
属性
1. set 和 get 访问器
- protocol SomeProtocol {
- var mustBeSettable:Int { get set }
- var doesNotNeedToBeSettable: Int { get }
- }
2.静态属性
- protocol AnotherProtocol {
- class var someTypeProperty: Int { get set }
- }
3.只读
- protocol FullyNamed {
- var fullName: String { get }
- }
实例:
- struct Person: FullyNamed {
- varfullName: String
- }
- letjohn= Person(fullName: "John Appleseed")
- class Starship: FullyNamed {
- varprefix: String?
- varname: String
- init(name: String, prefix: String? = nil) {
- self.name = name self.prefix = prefix
- }
- varfullName: String {
- return (prefix ? prefix!+ " " :"")+ name
- }
- }
- varncc1701 = Starship(name: "Enterprise",prefix: "USS")
方法
1.定义方法
- protocol RandomNumberGenerator{
- func random() -> Double
- }
2.定义静态方法
- protocolSomeProtocol {
- class func someTypeMethod()
- }
实例:
- protocol RandomNumberGenerator{
- funcrandom() -> Double
- }
- class LinearCongruentialGenerator:RandomNumberGenerator {
- var lastRandom= 42.0let m = 139968.0
- let a = 3877.0 let c = 29573.0
- funcrandom() -> Double {
- lastRandom = ((lastRandom * a + c) %m)
- returnlastRandom / 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"
把协议作为类型使用
- protocol RandomNumberGenerator {
- func random() -> Double}
- class LinearCongruentialGenerator: RandomNumberGenerator {
- varlastRandom= 42.0 let m =139968.0
- let a = 3877.0 letc = 29573.0
- func random() -> Double {
- lastRandom = ((lastRandom * a + c) %m)
- return lastRandom / m
- }
- }
- class Dice {
- letsides: Int
- let generator: RandomNumberGenerator
- init(sides: Int, generator: RandomNumberGenerator) {
- self.sides = sidesself.generator = generator
- }
- func roll() -> Int{
- return Int(generator.random() * Double(sides)) + 1
- }
- }
- vard6 = Dice(sides: 6, generator: LinearCongruentialGenerator())
- for_ in 1...5 {
- println("Randomdiceroll is \(d6.roll())")
- }
Swift交流讨论论坛论坛:http://www.cocoagame.net
欢迎加入Swift技术交流群:362298485
Swift协议(Protocol)的更多相关文章
- Swift 协议protocol
// associatedtype 关键字 用来声明一个类型的占位符作为协议定义的一部分 protocol LXFViewModelType { associatedtype Input associ ...
- 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器
1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...
- iOS阶段学习第19天笔记(协议-Protocol)
iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者 之间通讯的一种方式 2) ...
- OC基础--分类(category) 和 协议(protocol)
OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低, ...
- 协议Protocol
1.协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口. 遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议. ...
- 浅谈iOS开发的协议(protocol)和代理(delegate)
协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...
- 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol
关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...
- Objective-C中的协议(Protocol)和类别(Category)
1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...
- Objective-C 中的协议(@protocol)和接口(@interface)的区别
Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...
- Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
总结:继承.分类(Category.extension).协议(protocol) 一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...
随机推荐
- Java中throws和throw的区别讲解
当然,你需要明白异常在Java中式以一个对象来看待.并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示, ...
- C++为什么不支持某些东西
1.学习C++的过程,经常发现C++不支持一些东西,思考下,为什么? 2.C++不支持一些东西,有两个原因: a.可以做到,但是会导致一些不合理的结果,这些结果往往与程序员的期望不一致. b.属于“臣 ...
- 线程池QueueUserWorkItem
// Test1.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...
- Android Service AIDL 远程调用服务 【简单音乐播放实例】
Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...
- C#二维数组(矩形数组,交错数组)
C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...
- Activate、Deactivate 事件 Activate ThrottleEvent;
http://help.adobe.com/zh_CN/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html Activate.De ...
- 利用 Composer 完善自己的 PHP 框架(二)——发送邮件
本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顾 上一篇文章中,我们手工建造了一个简易的视图加载器 ...
- C# 之 静态字段初始化
当一个字段声明中含有 static 修饰符时,由该声明引入的字段为静态字段(静态变量).当不存在 static 修饰符时,由该声明引入的字段为实例字段(实例变量). 静态字段不 ...
- C语言第四节数据类型、常量、变量
数据 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数据.用迅 ...
- TCP/IP协议原理与应用笔记18:构成子网和超网
1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模 C类地址:少于255台主机的网络 B类地址:介于255~65535台主机的网络 ...