多种协议的 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)的主要内容,如果未能解决你的问题,请参考以下文章

Swift21-协议

Swift21-协议

带有 Swift 5.0 编译器的 Xcode 10.2 - 协议继承问题

从 Xcode 外部的项目 Swift 导入类

OpenTok/TokBox 的 Swift 协议一致性错误

Xcode 7 中的 CoreData 类