协议深入故事

按照苹果的定义,

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

作为工作的一部分,我接受了iOS开发人员的面试。 什么是协议? 是我在面试中问的一个常见问题。 许多候选人试图记住上面的定义,并重复一遍。 尽管他们对此进行了努力,但许多人仍无法正确解释。 如果我问一些交叉问题,许多人将无法回答。 在刚开始的日子里,尽管我在应用程序中大量使用协议,但我在向某人解释时也难以正确解释协议。

因此,我正在写此博客,以从最基本的角度讨论协议。

在讨论协议之前,让我们假设Swift中没有协议。

通常我们将如何从一个班级交流到另一个班级? 我们需要为该类创建一个对象。 通过使用该对象,我们可以在该类中调用函数。 这很简单。

现在,让我们从一个示例开始,您已经创建了一个名为Stepper的UIVIew子类,我们需要在项目的多个视图控制器中使用该Stepper。 棘手的是,Stepper需要将视图中发生的更改通知给视图控制器。 因此,如果没有协议,Stepper应该具有视图控制器的对象。 假设有三个控制器使用步进器。 因此,对于所有这些人,Stepper应该具有对象。 然后,只有Stepper才能将消息传递到控制器。 而且,如果您想在另一个项目中使用此Stepper,则再次需要在Stepper中进行更改以兼容新项目中的视图控制器。 实际上,它将非常难以管理。 这就是协议帮助我们在项目中避免这种无意义的代码的地方。

协议有何帮助?

  1. 为了通知计数值变化,我们将创建一个带有函数的协议,该函数将通知计数值变化。

现在,我们只需要在Stepper类中为此协议创建一个对象。

var委托:StepperDelegate?

现在,我们将研究视图控制器的实现。

上面的代码指示FirstViewController是UIViewController的子类。 因此,根据继承,通过使用FirstViewController对象,我们还可以调用在UIViewController中声明的public / open函数。

现在,我们将在FirstViewController中添加StepperDelegate协议。

通过在类声明中添加StepperDelegate,我们告诉Stepper该FirstViewController也将包含在StepperDelegate协议中声明的函数的定义。 (在某种程度上,协议是继承的一部分)。

最后,每当计数更改时,Stepper都会使用StepperDelegate协议发送该消息。

协议是应用程序开发中非常有用的东西,如果我们不知道它是如何工作的,也很难解释。

希望您喜欢这篇文章。

编码愉快。