在Swift类扩展中使用Self

在扩展类时,将Self用作参数类型可能很诱人,但是Swift只允许在协议中或作为类方法调用的结果来使用它。

实际上,在大多数情况下,这是非final类在语义上正确的限制,除非我们要使用Self作为闭包的参数,例如考虑完成处理程序。 在这种情况下, Self用作另一个方法调用结果,这是绝对有效的选项。

我最喜欢的示例是Operation类的延续帮助器:

  • 使用继续操作而不是完成块可以控制其执行上下文。
  • 我倾向于在Operation子类中定义结果访问器,而我通常希望连续地访问它们。
  • 从延续中访问操作不会引入保留周期,因为任何操作都已经拥有其依赖项。

因此,我们需要传递刚刚完成执行的块接收操作作为参数。 这在类扩展中是不允许的。

嗯,但是我们可以在协议中以这种方式使用Self ,对……救援协议! 计划是定义一个虚拟协议,使我们的类符合该协议,并扩展该协议而不是该类。

现在我们可以以类型安全的方式使用continue(on:with:)扩展和访问操作结果:


感谢您的宝贵时间,并希望本文对您有所帮助。 如果您觉得本文有用,请不要忘记to。