swift为什么是面向协议编程
面向协议编程 (Protocol Oriented Programming) 是 Apple 在 2015 年 WWDC 上提出的 Swift 的一种编程范式。

面向协议编程通过字面意思,我们可能觉得面向协议编程都是和协议相关的,其实这个假定可能是错误的,面向协议编程与面向对象编程一样,是一种新的编写程序的方式,不仅仅和协议相关。
protocol - 基本用法

协议定义:

protocol 协议名称 {// 定义协议内容
}

声明协议:

class  类名 : 父类 {var delegate:协议名称? = nil;
}

遵循协议:

class 实现协议类名: 父类 {// 创建一个类let 类名 = 类名()类名.delegate = self
}extension 实现协议类名:协议名 {// 实现协议内容
}

protocol协议,就是a类不想自己完成协议内容,可以指定实现协议类来帮忙实现

ps;iOS开发交流技术:欢迎你的加入,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长

我们可以用一个现实例子来实现,现有客户Person_A,需要完成打扫房间和做饭的这两个功能,客户这时候并不想自己完成这些,这时候需要家政Person_B来完成

/// 定义家政协议
protocol Housekeeping {/// 协议内容-打扫房间func cleanHome()/// 协议内容-做饭func doCooking()
}/// 创建客户A
class Person_A : NSObject {/// 声明协议var delegate:Housekeeping? = nil;/// 打扫房间func cleanHome() {delegate?.cleanHome()}/// 做饭func doCooking() {delegate?.doCooking()}
}
// 这时候客户提出需求,我们需要构建一个家政B来实现协议内容
class Person_B : NSObject {}
/// 实现协议
extension Person_B:Housekeeping {func cleanHome() {print("家政-清扫完成了")}func doCooking() {print("家政-饭做好了")}
}
/// 创建客户
let person_A = Person_A()
let person_B = Person_B()
person_A.delegate = person_B
person_A.cleanHome() // 家政-清扫完成了
person_A.doCooking() // 家政-饭做好了

Struct的优势
我们一直会说OC是面向对象语言我们在开发的时候会使用Class来解决许多问题,对于swift来说,更推荐我们使用struct

Class类是引用类型,可以继承
Struct是值类型,不能继承

swift中我们常用的数据类型,字符串,集合类型,结构体和枚举都是值类型,我们在赋值的时候相比class更加高效且不存在线程安全。

为何swift更适用面向协议编程

struct没有继承的功能,这是因为swift在本质上来说是面向协议 (Protocol Oriented) 的语言,struct没有也不需要继承的功能,为了实现某个功能,struct去服从并实现某个协议就即可,从一个较高的层次来看,struct+protocol是构成swift面向协议语言的两个基石

知道swift为什么是面向协议编程么?不知道,还不快来学习!相关推荐

  1. Swift 面向协议编程 基础篇 (一) 介绍

    前言 好久没有写文章了,期末复习周也到了.在复习的同时顺便开了一个专题,面向协议编程,[ 基础篇 ],[ 进阶篇 ],[ 实践篇 ]. 介绍 首先,面向对象(OOP)大家并不陌生,苹果的很多框架都是以 ...

  2. Swift 面向协议编程的那些事

    一直想写一些 Swift 的东西,却不知道从何写起.因为想写的东西太多,然后所有的东西都混杂在一起,导致什么都写不出来.翻了翻以前在组内分享的一些东西,想想把这些内容整理下,写进博客吧.我对计划要写的 ...

  3. 面向协议编程与 Cocoa 的邂逅(上)

    作者简介: 王巍(@onevcat),江湖人称"喵神",iOS 和 Unity3D 开发者,旅居日本,目前供职于 LINE,著有<Swifter - 100 个 Swift ...

  4. swift3面向协议编程实现Alamofire封装

    1.原先的实现过程我们一般使用的是Alamofire,对其单例封装 // // NetworkTools.swift // // Created by targetcloud on 2017/3/26 ...

  5. 面向协议与面向对象的区别

    面向对象的设计和面向协议的设计都使用了多态让我们使用同样的接口来跟不同的类型进行交互.在面向对象的设计中,我们使用了基类提供的接口来跟所有的子类进行交互.在面向协议的设计中,我们使用了协议和协议扩展提 ...

  6. swift开发之--Protocol(协议)

    使用object-c语言的同学们肯定对协议都不陌生,但在swift中苹果将protocol这种语法发扬的更加深入和彻底. Swift中的protocol不仅能定义方法还能定义属性,配合extensio ...

  7. 不要用子类!Swift的核心是面向协议

    作者:ray1689718 授权本站转载. 本篇文章翻译自:IF YOU'RE SUBCLASSING, YOU'RE DOING IT WRONG. 原作者:Hector Matos 原发表日期:2 ...

  8. Swift41/90Days - 面向轨道编程 - Swift 中的异常处理

    问题 在开发过程中,异常处理算是比较常见的问题了. 举一个比较常见的例子:用户修改注册的邮箱,大概分为以下几个步骤: 接收到一个用户的请求:我要修改邮箱地址 验证一下请求是否合法,将请求进行格式转化 ...

  9. iOS面向切面编程-AOP

    1. AOP简介 AOP: Aspect Oriented Programming 面向切面编程. 面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目 ...

最新文章

  1. MySQL , MHA , Haproxy 配置
  2. 边做边思考,谷歌大脑提出并发RL算法,机械臂抓取速度提高一倍!
  3. Android零基础入门第44节:ListView数据动态更新
  4. CentOs7中resourcemanager启动不了
  5. glide源码中包含了那种设计模式_推荐一个好用的拍照选图库,致敬Glide
  6. 微型计算机字长是不是字节的倍数,2014台湾省WORD全国计算机等级考试二级VB考试技巧重点...
  7. Janus流媒体服务器信令分析
  8. 100 万在中国不同地方能活多久?
  9. 漫画:7种编程语言的学习曲线
  10. python属性_Python属性()
  11. 大数据与商业地理分析
  12. 如何通过git客户端上传项目到github上
  13. 每日算法系列【LeetCode 376】摆动序列
  14. 2019大一下学期第九周总结
  15. 基于JAVAEE公共自行车租赁系统
  16. reached end of file while parsing
  17. 源来是你-Vol.38 | 浪潮开务数据库招人辣!准备好加入幸福感爆棚的KW家族了么?...
  18. unittest用例封装
  19. Word怎么删除空白页?这3种方法:适用于所有版本Word!
  20. webRtc+websocket多人视频通话

热门文章

  1. 申报倒计时|武汉东湖高新区促进外资企业投资发展专项资金最后6天
  2. 2022新版驾考技巧驾考培训驾考技巧考试培训系统源码/题库小程序/题库系统源码/驾考答题系统源码
  3. python爬虫17K小说网资料
  4. 二维码扫码登录是什么原理?
  5. Java学到什么程度才能叫精通?
  6. word文档中如何删除空白页
  7. IOS欢迎界面Launch Screen动态加载广告
  8. vert.x中future的简单使用
  9. C++ 指针与取地址
  10. 谷歌浏览器关闭后未清除cookie