快速进行面向协议的编程

你们都有关于POP的知识:面向过程的编程&OOP:面向对象的编程。 如果您了解C,那么您必须了解POP。 我心爱的Objective C也遵循OOP概念。 现在,SWIFT。 它遵循面向协议的编程(Protocol OP)。

有人说Swift使用了太多协议,所以它是Protocol OP。 大声笑。 这绝对是错误的概念。

协议

首先让我们了解协议。 协议不过是接口,或者您可以说它是属性和功能的蓝图,任何类或结构都可以采用它来执行特定任务。

让我们看看它是如何工作的。

 协议播放器{ 
var song:字符串{获取设置}
var artist:字符串{获取设置}
var audioLink:字符串{获取设置} func play()
func pause()
}

我创建了一个简单的Player协议 ,该协议具有三个属性和两个功能。 下面,我有一个用Player协议装饰的AudioPlayer类 采用协议将迫使您实现它具有的所有属性和功能。

 类AudioPlayer:播放器{ 
var song:字符串
var艺术家:字符串
var audioLink:字符串

init(歌曲:String,艺术家:String,audioLink:String){
self.song =歌曲
self.artist =艺术家
self.audioLink =音频链接
} func play(){
//播放音频的代码
} func pause(){
//暂停音频的代码
}}

只能为类类型设计协议。 我们可以通过将AnyObject添加到协议的继承列表中来实现。

协议初始化

我们可以在协议中包含初始化程序。 因此,将要采用此协议的类需要在初始化之前使用要求的关键字实现初始化程序

 协议播放器{ 
在里面()
}类AudioPlayer:播放器{
必需的init(){
//代码
}
}

如果该类将重写指定的初始化程序,并从协议中实现匹配的初始化程序要求,那么我们就必须将重写器实现和必需标记为初始化程序实现。

 协议播放器{ 
在里面()
}类AudioPlayer:NSObject,播放器{
需要重写init(){
//码
}
}

可选协议方法

到目前为止,我们已经讨论了协议属性,方法和初始化程序。 如前所述,采用协议将迫使您在类或结构中实现协议的所有属性,方法和初始化程序。 但是协议也可以有一些可选方法。 我们可以通过在协议终止之前添加@objc来实现此目的。 让我们看看我们的播放器协议。

  @objc协议播放器{ 
func play()
func pause()
@objc可选func resume()
}类AudioPlayer:播放器{
func play(){
//代码
} func pause(){
//代码
}
}
//音频播放器尚未实现resume方法。
//您可以检查UITableViewDelegate协议。 它具有所有可选方法。

为什么要协议?

通过以上讨论,您必须对协议有基本的了解。 现在您必须在心中有一个问题,如果一个类可以有其子类 ,为什么要使用协议 ? 子类可以继承其父类的所有属性和方法(最终属性和方法除外)。 Swift不支持多重继承。 因此,协议OP可以帮助我们克服这种缺陷。

协议充当蓝图而不是父代。 这是协议OP和OOP之间的主要区别。

结论

协议是抽象类(在OOP中)。 Swift同时具有OOP和Protocol OP。 两者是相辅相成的。 为此,Swift更加容易使用。


谢谢阅读。 希望你喜欢它。 随时发表评论。