问题

我将从Apple developer page开始学习iOS教程。

在我看来,protocolinterface几乎具有相同的功能。

  • 两者之间有什么不同吗?
  • 项目中的差异用法?

更新了

,我确实阅读了上面的链接,我仍然不确定protocolinterface之间的差异和用法。当我问这样的问题时,我想看一个关于这个主题的简单解释。有时从文档中获取所有内容可能很困难。


#1 热门回答(68 赞)

基本上协议与Java接口非常相似,除了:

  • Swift协议还可以指定必须实现的属性(即字段)
  • Swift协议需要通过使用mutating关键字来处理值/引用(因为协议可以通过结构和类来实现)
  • 你可以随时使用协议<>关键字组合协议。例如,声明必须遵守协议A和B的函数参数:

func foo ( var1 : protocol<A, B> ){}

这些是Java开发人员的明显差异(或至少到目前为止我发现的)。


#2 热门回答(22 赞)

补充@Thomas Schar的答案。 Swift协议魔法来自扩展。

  • Swift协议可以通过扩展(Swift 2)实现。 Java 8接口可以具有默认实现,但不能"追溯"完成。
  • 在swift中,你可以"追溯"将协议要求(及其实现,如果需要)添加到任何类或结构。
  • Swift协议不遵循通用(即<...>)定制模式,而是遵循类型方案(即关联类型)。在开始时可能会令人困惑,但在某些情况下可以避免"斜角失明"。
  • Swift具有高级类型模式匹配,允许非常具体地说明协议要求和扩展的应用位置和方式。来自Java时可能会令人困惑,但它有很多功能。
  • 可以为属性/参数组成Swift协议(即庆祝者:协议)

让我头疼几个小时的一件事是,并非所有协议都可以用作属性类型。例如,如果你有一个带有typealias的协议,你不能直接使用它作为一个属性的类型(当你考虑它时它是有意义的,但是从Java中我们真的想拥有像userDao:IDao这样的属性)。


原文链接