在Swift中,Java接口或Objective-C协议的等效物是什么?

32
我一直在研究新的Swift语言,试图找到与Java中的接口或Objective-C中的协议等效的内容。在浏览互联网和搜索Apple提供的书籍之后,我仍然找不到它的名称和语法。请问有人知道Swift中这个组件的名称和语法是什么吗?

4
Swift 中有协议。文档链接 - Cezary Wojcik
5
“协议” - Swift 书籍第464页 - David Skrundz
2个回答

49

Swift中的协议与Objc非常相似,唯一的区别是你可以在类、结构体和枚举上使用它们。

protocol SomeProtocol {
     var fullName: String { get } // You can require iVars
     class func someTypeMethod() // ...or class methods
}

遵守协议有些不同:

class myClass: NSObject, SomeProtocol // Specify protocol(s) after the class type

你也可以通过默认(可重写)函数实现来扩展协议:

extension SomeProtocol {
      // Provide a default implementation:
      class func someTypeMethod() {
           print("This implementation will be added to objects that adhere to SomeProtocol, at compile time")
           print("...unless the object overrides this default implementation.")
      }
}

注意:默认实现必须通过扩展添加,而不是在协议定义本身中 - 协议不是具体对象,因此实际上无法附加方法体。将默认实现视为 C 风格的模板;本质上,编译器会将声明复制并粘贴到遵循协议的每个对象中。


我遇到了错误,请帮忙。'ViewController'不符合协议'SomeProtocol',其中ViewController是我的类,我已经实现了"SomeProtocol"。 - Qadir Hussain
2
你必须在MyClass中实现协议方法,这就是为什么你会得到上述错误的原因。同样,在Java中,当你在类中实现一个接口时,你也要实现抽象方法。 - user1154390

10

Swift也有协议,这里是相关文档:链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接