`

Swift协议(Protocol)

c 
阅读更多

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

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

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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 访问器

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1.  protocol SomeProtocol {  
  2.  var mustBeSettable:Int { get set }  
  3. var doesNotNeedToBeSettable: Int { get }  
  4.  }  

 

 

 

2.静态属性

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. protocol AnotherProtocol {  
  2.  class var someTypeProperty: Int { get set }  
  3.  }  

 

 

3.只读

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. protocol FullyNamed {  
  2. var fullName: String { get }  
  3.  }  

 

 实例:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. struct Person: FullyNamed {  
  2.  varfullName: String  
  3.  }  
  4.  letjohnPerson(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")  
  16.    

 

 

 方法

 1.定义方法

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1.  protocol RandomNumberGenerator{  
  2. func random() -> Double  
  3. }  

 

 

2.定义静态方法

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1.  protocolSomeProtocol {  
  2.  class func someTypeMethod()  
  3. }  

 

 

实例:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. protocol RandomNumberGenerator{  
  2.  funcrandom() -> Double  
  3.  }  
  4.  class                   LinearCongruentialGenerator:RandomNumberGenerator {  
  5. var lastRandom42.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 generatorLinearCongruentialGenerator()  
  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"  

 

 

 把协议作为类型使用

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1.  protocol RandomNumberGenerator {  
  2.  func random() -> Double}  
  3.  class LinearCongruentialGenerator: RandomNumberGenerator {  
  4.  varlastRandom42.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 4 Protocol-Oriented Programming(Swift 4)

    《Swift 4 Protocol-Oriented Programming》是一本深入探讨Swift语言中协议导向编程(Protocol-Oriented Programming, POP)技术的书籍。本书由资深软件工程师Jon Hoffman撰写,通过第三版的更新进一步完善了对Swift...

    swift-请求ProtocolBuffers和JSON的Swift示例

    在Swift编程中,Protocol Buffers(简称Protobuf)和JSON都是常见的数据序列化格式,用于在应用程序之间交换结构化数据。Protocol Buffers提供了一种高效、跨语言的序列化机制,而JSON则是一种轻量级的文本数据交换...

    swift-ZIKRouter基于protocol的iOS模块路由和依赖注入框架

    这个框架基于Swift的协议(Protocol)编程理念,使得开发者能够以声明式的方式定义和管理应用的不同模块,促进了代码的解耦和可复用性。 在iOS应用开发中,模块化是一种常见的设计模式,它将应用分解为多个独立的、...

    Protocol.Oriented.Programming.with.Swift.1785

    Swift的设计核心包含了极其强大的概念:协议导向编程(Protocol-Oriented Programming)。这一理念带来了诸多好处,包括更好的代码可维护性、提高开发者生产力以及更优秀的应用性能。本书将教授读者如何应用协议导向...

    Packt.Swift.4.Protocol-Oriented.Programming.3rd.Edition.2017

    本书深入探讨了 Swift 编程语言中的协议导向编程(Protocol-Oriented Programming,POP)这一核心概念,并通过实际案例展示了如何利用 POP 来提高代码的可预测性、性能和生产力。 #### 一、Swift 与 Protocol-...

    让oc像swift那样给@protocol协议添加方法的默认实现教程加demo,

    通过这个项目,你可以看到实际操作的效果,并理解如何在OC中实现类似Swift协议默认实现的功能。 总之,虽然OC不像Swift那样直接支持协议的默认实现,但通过Category和Extension,我们仍然可以模拟出类似的功能,...

    iOS之协议protocol

    在iOS开发中,协议(Protocol)是Objective-C和Swift编程中的一个重要概念,它定义了一组方法,这些方法可以被不同的类实现。协议主要用于类之间的通信,尤其在处理 delegate 模式时,它使得对象间能以一种灵活的...

    协议Protocol.playground.zip

    这个“协议Protocol.playground.zip”文件显然是一个用于学习和实践Swift协议的代码示例。通过在Playgrounds中运行这个项目,我们可以深入理解如何使用协议来增强代码的灵活性、可扩展性和可复用性。 在Swift中,...

    Swift中的协议(protocol)学习教程

    Swift中的协议(Protocol)是语言的关键特性之一,它允许我们定义一套接口标准,任何类型(包括结构体、枚举和类)只要遵循该协议,就必须实现协议中所规定的属性和方法。这使得不同类型的对象能够以统一的方式进行...

    swift-swift面向协议方式封装网络层框架

    在Swift编程语言中,面向协议(Protocol-Oriented Programming,POP)是一种强大的设计模式,它强调利用协议来定义行为和交互,而非传统的类继承。在iOS和macOS开发中,网络层框架是应用的重要组成部分,负责与...

    Swift UITableView and protocol 学习使用

    7. **Protocol扩展**:Swift中的协议扩展允许我们在不为具体类型实现的情况下提供默认实现。这在处理UITableViewDataSource和UITableViewDelegate时非常有用,特别是当多个表格视图共享相似的行为时。 8. **...

    Swift协议扩展:扩展协议能力的超能力

    ### Swift协议扩展详解 Swift 作为一种现代化且高效的编程语言,为开发者提供了许多强大的特性来构建稳定、高效的应用程序。其中一个非常实用且具有高度灵活性的功能便是协议扩展(Protocol Extensions)。通过本篇...

    ios-协议protocol

    在iOS开发中,协议(Protocol)是Objective-C和Swift编程中的一个重要概念,它定义了一组方法,但并不实现这些方法。类、结构体或枚举类型可以遵循一个或多个协议,从而实现多态性,这使得代码更加灵活和可扩展。...

    swift delegate 协议 代理

    在Swift中,代理协议通常以类型为`protocol`的形式存在,用来规范那些想要实现代理功能的类或结构体必须遵循的方法。 首先,让我们理解代理协议的工作原理。当一个对象(比如视图控制器)需要执行某些操作但不希望...

    Swift Protocol-Oriented Programming.zip

    `@objc`可以让Swift协议暴露给Objective-C,而`@convention`则可以指定方法调用的约定。 总之,Swift Protocol-Oriented Programming强调了以协议为中心的设计思想,通过协议、协议扩展、泛型、关联类型等工具,...

    protobuf-swift, 谷歌ProtocolBuffers的谷歌.zip

    protobuf-swift, 谷歌ProtocolBuffers的谷歌 用于Swift的协议缓冲器 Swift中协议缓冲区的实现。协议缓冲区是一种以高效但可扩展的格式编码结构化数据的方法。 这个项目是基于Google的协议缓冲区的实现。 有关更多...

    Protocol Oriented Programming (Swift 4)

    面向协议编程(Protocol Oriented Programming,简称POP)是Swift 3.0以后由Apple提出的一种编程理念。这种编程范式充分利用了Swift语言的特点,比如协议扩展、协议继承等,与传统的面向对象编程(Object Oriented ...

    swift-swift-pons-纯Swift中面向协议的数字系统

    首先,让我们深入了解一下面向协议编程(Protocol-Oriented Programming, PON)。Swift中的协议不仅仅是接口,它们可以包含默认实现、关联类型、类型约束和扩展。通过遵循协议,一个类型可以获得额外的功能,而无需...

Global site tag (gtag.js) - Google Analytics