Swift中面向协议的编程

什么是面向协议的编程?

面向协议的编程,是一种编程范式。

编程范式,是一个计算机科学用语。维基百科中的解释是,计算机编程的基本风格或典型模式。通俗来说,就是解决某一个问题的方法不同方法和思路。

像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式。

面向过程编程,关心的焦点是解决某一个问题需要多少步。而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系。

解释完了编程范式这个名字含义之后,我们继续回到正题上来。

既然面向协议编程,与面向对象,面向过程一样,是一种编程范式。那么这种编程范式相对其他其他两种范式有什么优点和优势呢。

在回答这个问题之前,我们先来回顾一下面向对象。

大家知道面向对象,相对面向过程已经是一种进步,能够让一个复杂的的工程划分为若干个小的独立的模块,减少了软件的复杂度。

这主要得益于面向对象编程里的几个核心概念,封装,继承,多态。

在面向对象的编程世界中,对象是构建程序的基本单元,

封装提供代码一个安全和便捷的访问机制

继承让子类很容易复用父类的代码

多态是对象具有更多抽象能力,写出更加通用的代码。

但是大家你在使用它们的时候,也是有成本的。主要有三个

1、implicit data sharing

2、Inheritance issues

每当你创建一个对象的时候,你第一件事就是得考虑它集成谁。并且呢,集成一般是单继承,只能有一个父类,不能有多个。而且,如果在开发中期你想改变自己的父类是一个非常难得事情。还有,父类的所有属性和方法,你都必须得都集成过来,不管你想要还是不想要,没有任何商量的余地。

3、Lost Type Relationship

虽然多态让对象具有更多抽象能力,但是我们必须得写很多类型转换代码。例如,一些基类在调用某些方法的时候,基类没有实现,子类实现了。这个时候你必须将基类转化成子类才能够调用,这造成了类型的缺失。

面向协议这个概念的提出,就是为了解决以上面向对象所遇到的问题。

我们以一个具体的例子来看一看面向协议编程是如何写的。

待写

时间: 2024-10-10 02:03:36

Swift中面向协议的编程的相关文章

为什么swift是面向协议的编程--对面向对象机制的改进

主要目标是提供抽象能力和解决值类型的多态问题 Actually, Abrahams says, those are all attributes of types, and classes are just one way of implementing a type. Yet, they exact a heavy toll on programmers in that they may cause: Implicit sharing, such that if two objects ref

Swift -POP( 面向协议编程)与OOP

面向协议编程(Protocol Oriented Programming,简称POP),是Swift的一种编程范式,Apple于2015年WWDC提出的,如果大家看Swift的标准库,就会看到大量POP的影子. 同时Swift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP),在Swift开发中,OOP和POP是相辅相成的,任何一方并不能取代另一方. 回顾OOP OOP的三大特性:封装.继承.多态 继承的经典使用场合 当多个类(比如A.B.C类)具有

用 Swift 编写面向协议的视图

我最近做了个 Swift 面向协议编程实践 (POP:boom:) 的演讲.视频还在处理中.另一方面,这是演讲中 POP 视图部分的文本记录,供我和其他任何人作参考! 简单的任务 假设你要写一个由一张图片和一个按钮构成的简单应用,产品经理希望按钮被点击的时候图片会抖动,就像这样: 由于这个动画常常在用户名或者密码输入错误时被用到,所以我们很容易就能 在 StackOverflow 上找到代码 (就像每个好的开发者都会做的一样:grin:) 这个需求最难的地方就是决定实现抖动的代码应该写在哪儿,但

用 Swift 编写面向协议的网络请求

和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典??吧!使用优惠码 NATASHATHEROBOT 可以获得 $100 的折扣! 我最近做了个 Swift 面向协议编程实践(POP??) 的演讲.视频还在处理中.另一方面,这是演讲中 POP 视图部分的文本记录,供我和其他任何人作参考! 普通的配置方式 假设我们要做一款展示全球美食图片和信息的 App.这需要从 API 上拉取数据,那么,用一个对象来做网络请求也就是理所当然的了: struct FoodService

Swift中声明协议中的class关键字的作用

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片段: protocol GameMode:class{ var userInterface:CCNode! {get} func gameplay(mainScene:MainScene,droppedFallingObject:FallingObject) func gameplay(mainSc

Swift中的协议

协议: 1.Swift协议用于定义多个类型应该遵守的规范 2.协议定义了一种规范, 不提供任何实现 3.协议统一了属性名, 方法, 下标, 但是协议并不提供任何实现 4.语法格式: [修饰符] protocol 协议名: 父协议1, 父协议2, ... { // 协议内容 } 修饰符:可以省略, 也可以是private, internal, public之一 协议名应与类名采用相同的命名规则 一个协议可以有多个直接父协议, 但协议只能继承协议, 不能继承类 协议的内容: 指定协议实现者必须提供的

Swift 学习笔记(面向协议编程)

在Swift中协议不仅可以定义方法和属性,而且协议是可以扩展的,最关键的是,在协议的扩展中可以添加一些方法的默认实现,就是在协议的方法中可以实现一些逻辑,由于这个特性,Swift是可以面向协议进行编程的. 扩展协议和默认实现 protocol Record { var wins: Int{get} var losses:Int{get} func winningPercent() -> Double } struct BasketballRecord:Record,CustomStringCon

Swift中协议的简单介绍

熟悉objective-c语言的同学们肯定对协议都不陌生,在Swift中苹果将 protocol 这种语法发扬的更加深入和彻底.Swift语言中的 protocol 不仅能定义方法还能定义属性,配合 extension 扩展的使用还能提供一些方法的默认实现,而且不仅类可以遵循协议,现在的枚举和结构体也能遵循协议了.基于此本文从 1,协议中定义属性和方法 , 2,协议的继承.聚合.关联类型 , 3,协议的扩展 , 4,Swift标准库中常见的协议 , 5,为什么要使用协议 5个方面结合自身的学习经

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存