Swift中的协议和实际示例

协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。 然后,该协议可以由类,结构或枚举采用,以提供这些要求的实际实现。 满足协议要求的任何类型都被称为符合该协议。

因此,为了简单起见,一个协议会说一个struct,class或enum,如果您想成为那个,请执行this,this和This。 示例:如果您想成为一名开发人员,则必须阅读并编写代码。

协议创建和采用

我们可以创建如下的Protocol

 协议SomeProtocol { 
//协议定义在这里
}

类,结构和枚举可以采用这些协议,方法是将协议名称放在类型名称之后,并用冒号分隔,作为其定义的一部分。 可以列出多个协议,并用逗号分隔。

  struct SomeStruct:FirstProtocol,SecondProtocol { 
//结构定义在这里
}

如果一个类具有超类,请在其采用的任何协议之前列出超类名称,后跟逗号。

  class SomeClass:SomeSuperClass,FirstProtocol,AnotherProtocol { 
//类定义在这里
}

示例一:财产要求

上面的协议只是说要采用我的任何类/结构/枚举必须具有一个名为fullName的属性,该属性必须是String的类型,并且该属性必须是一个用{get}表示gettable属性

First ImplementationSecond Implementation都有一个名为fullName的属性,因此尽管它们具有不同的实现,但它们都符合FullNameable protocol 。 我们的FullNameable协议说的是,我们需要有一个fullName属性,它没有说明我们应该如何获取此属性。 等等,那么什么使属性可gettable呢?

gettable属性是一个只有赋予初始值后才能读取的属性。

当我们尝试为fullName属性分配新值时,由于初始化Lecturer结构时使用了let关键字,它将失败。

该示例的原因是:

  • 展示如何使用协议并遵守该协议
  • 让我们理解,符合属性的类不必具有相同的实现。
  • 了解{ get }代表什么

示例二:连接松散的最终类别

让我们假设我们要制作冰沙,而制作冰沙所需的要求是MilkDairy 。 做冰沙,我们必须混合一些水果以及一些乳制品。 因此,我们将需要一个混合方法,所有制作冰沙的类都必须具有此方法,因此我们必须使用如下所示的协议来实施此方法

要制作冰沙,我们需要在每个符合Blendable协议的类上调用blend方法,我们可以实现

makeSmoothie方法将接受符合Blendable协议的类的数组,然后使用for循环访问每个类中的blend方法。 如果将不符合Blendable协议的类作为数组传递,则应用程序将引发错误。

该示例的原因是:

  • 展示如何使用方法作为协议要求
  • 了解如何访问符合协议的松散终端类

示例三:何时使用协议

一个问题是决定何时使用protocolclass inheritance进行class inheritance 。 确定何时使用protocolclass inheritance进行比较的最好秘诀是知道何时确定类之间的关系类型。 是IS-A关系还是HAS-A

IS-A关系是一种关系,其中孩子将拥有父母拥有的所有东西以及其他属性。 一个很好的例子是飞机和喷气飞机。 JetPlane is basically an Airplane具有其他属性/方法JetPlane is basically an Airplane

HAS-A关系是HAS-A关系类型,其中两个类不相同,但共享相似的属性/方法。 一个很好的例子是鸟和飞机。 鸟可以像飞机一样飞行。 这是使用协议的最佳时间。

该示例的原因是:

  • 显示何时在类继承上使用协议

示例四:协议继承

协议可以继承一个或多个其他协议,并且可以在继承的要求之上添加其他要求。 协议继承的语法类似于类继承的语法,但是可以选择列出多个继承的协议,并用逗号分隔:

继承Pet协议的任何类/结构/枚举也必须符合Animal协议,因为Pet协议是从Animal协议继承的。

很高兴与您分享这篇文章。 如果您喜欢本文,请通过鼓掌👏表示支持。 感谢您的宝贵时间,请确保关注我或在下面发表您的评论。 您可以在此处阅读有关协议的更多信息👇