【发布时间】:2020-02-10 14:40:46
【问题描述】:
我已将以下内容放入 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
}
错误出现在class Test 的声明旁边:
非'@objc'方法'increase()'不满足'@objc'协议'Sample'的要求
如果我在课堂上重新声明 increase() 和 decrease(),则警告将被静音。或者,如果我从协议中删除声明。谁能解释一下?
编辑
我确实需要一个 Objective-C 类来符合这个协议,因此一开始是 @objc。
【问题讨论】:
-
您仅为 Swift 范围提供默认实现。因为你的协议是
@objc你的Test类看不到默认实现 -
由于你使用了@-objc,当你实现一个协议时,你需要在你符合协议的类中实现它的方法。此外,您可能希望对您不想在类中实现的方法使用可选的 @objc。