4.1、协议

//: Playground - noun: a place where people can play

import UIKit
//“什么是协议以及为什么使用它们。
//如何学习和采用Swift协议?
//如何检查自定义类型的实例是否相等、大于或小于?
//如何将自定义对象的自定义信息打印到控制台?

//协议规定了用来实现某一特定功能所必需的方法和属性。
//任意能够满足协议要求的类型被称为遵循(conform)这个协议。
//类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。
//注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用。是一个非常重要的模块
//语法
//1、协议的语法格式如下:
protocol SomeProtocol {
// 协议内容
}
protocol AnotherProtocol{

}
//2、类遵循某个协议,需要在类型名称后加上协议名称,中间以冒号:分隔,作为类型定义的一部分。遵循多个协议时,各协议之间用逗号,分隔。
struct SomeStructure: SomeProtocol, AnotherProtocol {
// 结构体内容
}
//3、对属性的规定
//协议用于指定特定的实例属性或类属性,而不用指定是存储型属性或计算型属性。此外还必须指明是只读的还是可读可写的。
//协议中的通常用var来声明变量属性,在类型声明后加上{ set get }来表示属性是可读可写的,只读属性则用{ get }来表示。
protocol classa {
var marks: Int { get set }
var result: Bool { get }
//函数不用{}
func attendance() -> String
func markssecured() -> String

}
//在协议中你可以定义实例方法 , 也可以定义类方法 ,其方法和属性定义差不多。
protocol MethodPro{
func plus(a:Int , b:Int)->Int
static func toUpper(str:String)->String
}
class MethodClass: MethodPro {

func plus(a: Int, b: Int)->Int {
    return a + b
}
class func toUpper(str: String)->String {
    return str.uppercased()
}

}
//4、委托(代理)模式
protocol SayHelloDelegate{
func sayHello(name:String);
}
class ClassA {
var delegate:SayHelloDelegate?
var name = "lucy"
func play(){
delegate?.sayHello(name: name);
}
}
class ClassB:SayHelloDelegate {//谁继承谁收到传过来的值
var name="lily"
func sayHello(name:String) {
print("(name) 请 (self.name) 帮她 say Hello");
}
}
//我们这里定义了一个协议 ,有个很简单的方法,sayHello ,在A中声明了这个协议变量 ,使用了其方法 ,但这个方法却交给B去实现 。这就是一个很简单的代理模式
var ca = ClassA();
var cb = ClassB()
ca.delegate = cb
//B代理A去实现方法
ca.play(); //lucy 请 lily 帮她 say Hello

//5、协议可继承,可扩展
protocol classb: classa {
var present: Bool { get set }
var subject: String { get set }
var stname: String { get set }

}
class classc: classb {
var marks = 96
let result = true//可以声明为可读可写的,
// var result: Bool {return false}//也可以是只读
var present = false
var subject = "Swift 协议"
var stname = "Protocols"

func attendance() -> String {
    return "The \(stname) has secured 99% attendance"
}

func markssecured() -> String {
    return "\(stname) has scored \(marks)"
}

}
let studdet = classc()
studdet.stname = "Swift"
studdet.marks = 98
studdet.markssecured()
//studdet.result = false
print(studdet.marks)
print(studdet.result)
print(studdet.present)
print(studdet.subject)
print(studdet.stname)

extension classb{
func sayGoodBye(){
print("good-bye")
}
}
//练习page454
//1、以下不是swift标准库中常用的协议!4
//A自定义可转换的字符串B方程表C类似的比较D声音播放器
//2 为什么要在构建应用程序时使用协议?5
//A共享不同类型的属性和功能。B使自定义类型与系统或调试功能配合得很好。C增强相似性并提供类型功能。D定义事件,但将实现委托给另一个类型的实例。
//3 如何为在swift标准库中定义的类型采用自定义协议? 2
//4 在使用打印功能时,必须采用哪个协议来提供自定义文本? 1自定义字符串转换
//5 采用哪个协议判断两个类是否相等 2
//6 3

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容

  • 1. “你这个是假的。” 叶籽秋毫不留情的对林慕青说道。 “你这个多少钱买的?”叶籽秋接着问道。 “无价!”林慕青...
    背离说阅读 402评论 0 2
  • 你是穿透黑暗的霞光焚灭了整个黑夜灿烂了我的天空——缪莹 翻开日记本我看到了你也看到了整个世界——缪莹 念一段往事听...
    一个喜欢深夜读书的女子阅读 501评论 2 17
  • 无眠 —落羽 无眠秋色渐意浓 无眠夜色现已深 无眠行人正履匆 无眠睡人今无意 ………… 无眠何时落眠人?
    你的一个远方朋友阅读 218评论 0 3
  • 临摹 心蓝丫头 彩铅画。我只有12色啊,彩铅是买笔记本送的。捂脸~ 我画的海浪都趴下去了啊,被拍在了沙滩上。海浪画...
    小文文呀阅读 851评论 9 10
  • 可乐留在地上,空心刚管搭成的长椅,欢乐洒落一地。 耳机里播放着煽情的音乐,心里还空荡荡的,孤独弥漫了我。 ...
    莫斯科的钢琴破掉阅读 102评论 2 1