博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift协议(Protocol)
阅读量:6266 次
发布时间:2019-06-22

本文共 2363 字,大约阅读时间需要 7 分钟。

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

协议可以被类、结构体等详细实现(或遵守)。

 

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: Stringinit(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.0let a = 3877.0 let c = 29573.0funcrandom() -> 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.0let a = 3877.0 letc = 29573.0func random() -> Double {lastRandom = ((lastRandom * a + c) %m) return lastRandom / m}}class Dice { letsides: Intlet 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())")}

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5178573.html,如需转载请自行联系原作者
你可能感兴趣的文章
Google FireBase - fcm 推送 (Cloud Messaging)
查看>>
BBS论坛(二十七)
查看>>
html DOM 的继承关系
查看>>
装饰器的邪门歪道
查看>>
Dubbo常用配置解析
查看>>
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>
半小时学会上传本地项目到github
查看>>
Android学Jni/Ndk 开发记录(一)
查看>>
Linux Tcl和Expect的安装
查看>>
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>
Silverlight实用窍门系列:70.Silverlight的视觉状态组VisualStateGroup
查看>>