协议是为方法、属性等定义一套规范,没有具体的实现。
协议能够被类、结构体等具体实现(或遵守)。
- 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 4 Protocol-Oriented Programming》是一本深入探讨Swift语言中协议导向编程(Protocol-Oriented Programming, POP)技术的书籍。本书由资深软件工程师Jon Hoffman撰写,通过第三版的更新进一步完善了对Swift...
在Swift编程中,Protocol Buffers(简称Protobuf)和JSON都是常见的数据序列化格式,用于在应用程序之间交换结构化数据。Protocol Buffers提供了一种高效、跨语言的序列化机制,而JSON则是一种轻量级的文本数据交换...
这个框架基于Swift的协议(Protocol)编程理念,使得开发者能够以声明式的方式定义和管理应用的不同模块,促进了代码的解耦和可复用性。 在iOS应用开发中,模块化是一种常见的设计模式,它将应用分解为多个独立的、...
Swift的设计核心包含了极其强大的概念:协议导向编程(Protocol-Oriented Programming)。这一理念带来了诸多好处,包括更好的代码可维护性、提高开发者生产力以及更优秀的应用性能。本书将教授读者如何应用协议导向...
本书深入探讨了 Swift 编程语言中的协议导向编程(Protocol-Oriented Programming,POP)这一核心概念,并通过实际案例展示了如何利用 POP 来提高代码的可预测性、性能和生产力。 #### 一、Swift 与 Protocol-...
通过这个项目,你可以看到实际操作的效果,并理解如何在OC中实现类似Swift协议默认实现的功能。 总之,虽然OC不像Swift那样直接支持协议的默认实现,但通过Category和Extension,我们仍然可以模拟出类似的功能,...
在iOS开发中,协议(Protocol)是Objective-C和Swift编程中的一个重要概念,它定义了一组方法,这些方法可以被不同的类实现。协议主要用于类之间的通信,尤其在处理 delegate 模式时,它使得对象间能以一种灵活的...
这个“协议Protocol.playground.zip”文件显然是一个用于学习和实践Swift协议的代码示例。通过在Playgrounds中运行这个项目,我们可以深入理解如何使用协议来增强代码的灵活性、可扩展性和可复用性。 在Swift中,...
Swift中的协议(Protocol)是语言的关键特性之一,它允许我们定义一套接口标准,任何类型(包括结构体、枚举和类)只要遵循该协议,就必须实现协议中所规定的属性和方法。这使得不同类型的对象能够以统一的方式进行...
在Swift编程语言中,面向协议(Protocol-Oriented Programming,POP)是一种强大的设计模式,它强调利用协议来定义行为和交互,而非传统的类继承。在iOS和macOS开发中,网络层框架是应用的重要组成部分,负责与...
7. **Protocol扩展**:Swift中的协议扩展允许我们在不为具体类型实现的情况下提供默认实现。这在处理UITableViewDataSource和UITableViewDelegate时非常有用,特别是当多个表格视图共享相似的行为时。 8. **...
### Swift协议扩展详解 Swift 作为一种现代化且高效的编程语言,为开发者提供了许多强大的特性来构建稳定、高效的应用程序。其中一个非常实用且具有高度灵活性的功能便是协议扩展(Protocol Extensions)。通过本篇...
在iOS开发中,协议(Protocol)是Objective-C和Swift编程中的一个重要概念,它定义了一组方法,但并不实现这些方法。类、结构体或枚举类型可以遵循一个或多个协议,从而实现多态性,这使得代码更加灵活和可扩展。...
在Swift中,代理协议通常以类型为`protocol`的形式存在,用来规范那些想要实现代理功能的类或结构体必须遵循的方法。 首先,让我们理解代理协议的工作原理。当一个对象(比如视图控制器)需要执行某些操作但不希望...
`@objc`可以让Swift协议暴露给Objective-C,而`@convention`则可以指定方法调用的约定。 总之,Swift Protocol-Oriented Programming强调了以协议为中心的设计思想,通过协议、协议扩展、泛型、关联类型等工具,...
protobuf-swift, 谷歌ProtocolBuffers的谷歌 用于Swift的协议缓冲器 Swift中协议缓冲区的实现。协议缓冲区是一种以高效但可扩展的格式编码结构化数据的方法。 这个项目是基于Google的协议缓冲区的实现。 有关更多...
面向协议编程(Protocol Oriented Programming,简称POP)是Swift 3.0以后由Apple提出的一种编程理念。这种编程范式充分利用了Swift语言的特点,比如协议扩展、协议继承等,与传统的面向对象编程(Object Oriented ...
首先,让我们深入了解一下面向协议编程(Protocol-Oriented Programming, PON)。Swift中的协议不仅仅是接口,它们可以包含默认实现、关联类型、类型约束和扩展。通过遵循协议,一个类型可以获得额外的功能,而无需...