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

时间: 2024-10-29 16:07:33

Swift协议(Protocol)的相关文章

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

一.引言 协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法.Swift中的协议使用protocol关键字来声明.Swift中的协议还有一个十分有意思的特性,协议可以通过扩展来实现一些方法和附加功能. 二.在协议中定义属性和方法 协议中定义的属性只约定名称和类型,在具体类型的实现中,其可以是存储属性也可以是计算属性,协议中还需要指定属性是可读的还是可读可写的.示例代码如下: protocol MyPortocol { //定义实例属性

窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用

协议与委托代理回调在之前的博客中也是经常提到和用到的在<Objective-C中的委托(代理)模式>和<iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流>等博客内容中都用到的Delegate回调.说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者Objc中的Protoco

swift 中怎么调用其他类的协议

问题描述 swift 中怎么调用其他类的协议 比如我创建了一个协议protocol 一个类 我想在这个类引用这个协议请问怎么实现? 感激不尽! 解决方案 朋友的需求有点模糊,举个protpcol的例子给朋友吧 创建协议: 遵循协议: 在实现协议的类中实现协议方法

Swift中文教程(七)协议、扩展和泛型

Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 6910

深入解析Swift语言中的协议_Swift

协议为方法,属性和其他要求的功能提供了一个蓝本.它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还可以通过定义类,函数和枚举完成.协议的一致性是指方法或属性满足协议的要求. 语法协议也遵循类似类,结构和枚举的语法: 复制代码 代码如下: protocol SomeProtocol {     // protocol definition } 协议在类,结构或枚举类型命名声明.单个和多个协议的声明也是可以的.如果多个协议规定,它们必须用逗号分隔. 复制代码 代码如下: struct Som

Swift UI学习之UITableView and protocol use

Models: UserModel.swift Views: UserInfoCell.swift Controllers: RootViewController.swift, DetailViewController.swift AppDelegate.swift: import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func

Protocol协议 按钮点击

要求:用协议模拟实现按钮的点击事件 Button.h #import <Foundation/Foundation.h> @class Button; //<>表示实现了某个协议 @protocol ButtonDelegate <NSObject> -(void)onClick:(Button *)btn; @end @interface Button : NSObject //delegate就是按钮的监听器 <>里面就是指上面的那个协议 @proper

Swift简介

原文:Swift简介 1. swift初始来源     没有了解过swift可以先参考Brec Victor的Inventing on Principle ,Swift编程环境的大部分概念都源自于Brec这个演讲. 2. swift是啥 Swift是苹果在WWDC 2014发布的新的编程语言,这里引用The Swift Programming Language的原文: Swift is a new programming language for iOS and OS X apps that b

Swift 学习之二十一:?和 !(详解)

新更新的内容请移步阅读: 第二节:Swift可选链 Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值, 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化 .如果在使用变量之前不进行初始化就会报错: var stringValue : String //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashValu