Swift中面向协议的编程
什么是面向协议的编程?
面向协议的编程,是一种编程范式。
编程范式,是一个计算机科学用语。维基百科中的解释是,计算机编程的基本风格或典型模式。通俗来说,就是解决某一个问题的方法不同方法和思路。
像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式。
面向过程编程,关心的焦点是解决某一个问题需要多少步。而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系。
解释完了编程范式这个名字含义之后,我们继续回到正题上来。
既然面向协议编程,与面向对象,面向过程一样,是一种编程范式。那么这种编程范式相对其他其他两种范式有什么优点和优势呢。
在回答这个问题之前,我们先来回顾一下面向对象。
大家知道面向对象,相对面向过程已经是一种进步,能够让一个复杂的的工程划分为若干个小的独立的模块,减少了软件的复杂度。
这主要得益于面向对象编程里的几个核心概念,封装,继承,多态。
在面向对象的编程世界中,对象是构建程序的基本单元,
封装提供代码一个安全和便捷的访问机制
继承让子类很容易复用父类的代码
多态是对象具有更多抽象能力,写出更加通用的代码。
但是大家你在使用它们的时候,也是有成本的。主要有三个
1、implicit data sharing

2、Inheritance issues
每当你创建一个对象的时候,你第一件事就是得考虑它集成谁。并且呢,集成一般是单继承,只能有一个父类,不能有多个。而且,如果在开发中期你想改变自己的父类是一个非常难得事情。还有,父类的所有属性和方法,你都必须得都集成过来,不管你想要还是不想要,没有任何商量的余地。
3、Lost Type Relationship
虽然多态让对象具有更多抽象能力,但是我们必须得写很多类型转换代码。例如,一些基类在调用某些方法的时候,基类没有实现,子类实现了。这个时候你必须将基类转化成子类才能够调用,这造成了类型的缺失。
面向协议这个概念的提出,就是为了解决以上面向对象所遇到的问题。
我们以一个具体的例子来看一看面向协议编程是如何写的。
待写
Swift中面向协议的编程的更多相关文章
- 为什么swift是面向协议的编程--对面向对象机制的改进
主要目标是提供抽象能力和解决值类型的多态问题 Actually, Abrahams says, those are all attributes of types, and classes are j ...
- 为什么说swift是面向协议编程--草稿
为什么说swift是面向协议编程 public protocol ReactiveCompatible { /// Extended type associatedtype CompatibleTyp ...
- Swift 中的协议
Swift 中的协议协议是为方法.属性等定义一套规范,没有具体的实现,类似于Java中的抽象接口,它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还需要通过定义类,函数和枚举完成. 协议定义 ...
- Swift -POP( 面向协议编程)与OOP(面向对象编程)
面向协议编程(Protocol Oriented Programming,简称POP),是Swift的一种编程范式,Apple于2015年WWDC提出的,如果大家看Swift的标准库,就会看到大量PO ...
- Swift中声明协议中的class关键字的作用
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片 ...
- Swift中的协议
协议: 1.Swift协议用于定义多个类型应该遵守的规范 2.协议定义了一种规范, 不提供任何实现 3.协议统一了属性名, 方法, 下标, 但是协议并不提供任何实现 4.语法格式: [修饰符] pro ...
- 用 Swift 编写面向协议的网络请求
和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典
- Swift 学习笔记(面向协议编程)
在Swift中协议不仅可以定义方法和属性,而且协议是可以扩展的,最关键的是,在协议的扩展中可以添加一些方法的默认实现,就是在协议的方法中可以实现一些逻辑,由于这个特性,Swift是可以面向协议进行编程 ...
- fir.im Weekly - 揭秘 iOS 面向协议编程
本期 fir.im Weekly 重点推荐关于 iOS 面向协议编程相关文章,还有 iOS 多线程安全.Swift 进阶.Android MVVM 应用框架.Android 蓝牙实践等技术文章分享和工 ...
随机推荐
- C#实现的异步Socket服务器
介绍 我最近需要为一个.net项目准备一个内部线程通信机制. 项目有多个使用ASP.NET,Windows 表单和控制台应用程序的服务器和客户端构成. 考虑到实现的可能性,我下定决心要使用原生的soc ...
- VBoxManage命令详解
转自:http://zhang-ly520.iteye.com/blog/300606 由于最近工作对vbox有一定涉猎,发现这个写的比较好,先转来,稍有空时再根据自己的心得整理一下. VBoxMan ...
- 关于超链接自动提示的demo
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 3.5 linux 0.11 目标文件格式
在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式.这是一种被称为汇编与链接输出(Assembly & li ...
- oracle触发器应用
首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...
- localstorage || globalStorage || userData
globalStorage 这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容量比IE的userdata大得多,一个域下面是5120k.和 ...
- JQuery调用iframe父页面元素与方法
JQuery操作iframe父页面与子页面的元素与方法 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元素的方法: $('#id', ...
- 嵌入式学习笔记(虚拟机共享文件夹配置-Ubuntu系统中)
最近在学习Linux的操作系统,使用的是虚拟机.由于一些文件需要在主机和虚拟机中都要编辑,如果可以使得文件共享,可以极大的提高工作效率! 配置共享文件的步骤如下: [第一步] 在虚拟机软件中设置 [第 ...
- codeforces567E. President and Roads
题目大意:总统要回家,会经过一些街道,每条街道都是单向的并且拥有权值.现在,为了让总统更好的回家,要对每一条街道进行操作:1)如果该街道一定在最短路上,则输出“YES”.2)如果该街道修理过后,该边所 ...
- 分布式配置管理平台 - Disconf介绍
原博客地址:http://blog.csdn.net/zhu_tianwei/article/details/47984545 Disconf专注于各种分布式系统配置管理的通用组件/通用平台,提供统一 ...