我已将以下内容放入 Playground 中以尝试理解这一点,但我只是不这样做:
import Foundation
@objc protocol Sample {
var value: Int { get set }
func increase()
func decrese()
}
extension Sample {
func increase() {
value += 1
}
func decrease() {
value -= 1
}
}
class Test: Sample {
var value: Int = 0
}
Run Code Online (Sandbox Code Playgroud)
class该错误出现在声明旁边Test:
非“@objc”方法“increase()”不满足“@objc”协议“示例”的要求
如果我在课堂上重新声明,increase()那么decrease()警告就会消失。或者如果我从协议中删除声明。有人可以解释一下吗?
编辑
我确实需要一个 Objective-C 类来遵守这个协议,因此一@objc开始就是这样。
问题是您\xe2\x80\x99 在协议扩展中定义这些方法。这用于定义协议的\xe2\x80\x9c默认实现\xe2\x80\x9d(即,如果类型没有\xe2\x80\x99t实现该方法,则将调用协议\xe2\x80\x99s实现)。
\n\n但是 Objective-C 没有协议默认实现的概念。因此,将协议声明为Swift 协议扩展@objc并在 Swift 协议扩展中拥有默认实现是没有意义的。符合此协议的 Objective-C 类将永远无法享受这些 Swift 默认实现。
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |