【问题标题】:Swift class conformance of multiple protocols (XCode 7, iOS 9, Swift 2.1)多种协议的 Swift 类一致性(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 你是对的。它有效,但前提是协议为空。请查看我编辑的问题。
  • 在你的类中创建函数。之后会确认
  • 协议为空有点傻。我的意思是没用。

标签: ios iphone swift protocols xcode7


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多