多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)
Posted
技术标签:
【中文标题】多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)【英文标题】:Swift class conformance of multiple protocols (XCode 7, iOS 9, Swift 2.1) 【发布时间】:2015-10-15 04:08:37 【问题描述】:如何让 Swift 类符合 ObjC 中的多种协议?
我收到一个错误提示
类型“ViewController”不符合协议“Protocol_A”
类型“ViewController”不符合协议“Protocol_B”
类型“ViewController”不符合协议“Protocol_C”
类型“ViewController”不符合协议“Protocol_D”
我期待 Swift 协议:能够轻松地工作并且与 Objective C 类似,但显然 Apple 有天才。哦,好吧。
编辑:
显然,当协议为空时,问题不会发生。
但是当我将func
添加到其中一个协议时,错误再次发生。
这是我的示例代码:
protocol Protocol_A
func someFunc()
protocol Protocol_B
protocol Protocol_C
protocol Protocol_D
class ViewController: UIViewController, Protocol_A, Protocol_B, Protocol_C, Protocol_D
【问题讨论】:
您的代码在我的 XCode 7 和 swift 2 上运行良好。 你的协议没有任何方法(除了你没有实现的A)。 @Leo 你是对的。它有效,但前提是协议为空。请查看我编辑的问题。 在你的类中创建函数。之后会确认 协议为空有点傻。我的意思是没用。 【参考方案1】:你必须在类中实现协议函数
例如
protocol Protocol_A
func someFunc()
protocol Protocol_B
func someFuncB()
protocol Protocol_C
protocol Protocol_D
class ViewController: UIViewController, Protocol_A, Protocol_B, Protocol_C, Protocol_D
func someFunc()
func someFuncB()
如果你希望函数是可选的
@objc protocol Protocol_A
optional func someFunc()
【讨论】:
这是正确的,但是ObjC
不需要这样做。该方法不需要存在于conformer内部。我想我是这里的天才哈哈
您也可以将方法设置为可选,请参阅我的更新。这是swift的风格,要么你声明它是可选的,要么conformer应该提供函数
这只是令人困惑,他们应该在某处允许定义,例如protocol optional
。以上是关于多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)的主要内容,如果未能解决你的问题,请参考以下文章
带有 Swift 5.0 编译器的 Xcode 10.2 - 协议继承问题