ios - 非'@objc' 方法不满足'@objc' 协议的要求
问题描述
我已将以下内容放入 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
一开始就是。
解决方案
问题是您在协议扩展中定义这些方法。这用于定义协议的“默认实现”(即,如果一个类型没有实现该方法,则将调用该协议的实现)。
但是 Objective-C 没有协议默认实现的概念。@objc
因此,将协议声明为并在 Swift 协议扩展中具有默认实现是没有意义的。符合此协议的 Objective-C 类将永远无法享受这些 Swift 默认实现。
推荐阅读
- django - 如何扩展 django-admin
- python - 附加到数组开头的 nil 值
- python - Django w/django_filters 按方法或非模型字段查找
- html - 将图像添加到 DIV 的中心
- python - 使用 sqlalchemy 将现有的 sqlite 数据库放入内存
- javascript - 如何在 SAPUI5 中的 JavaScript 对话框中添加关闭按钮?
- javascript - p5:调整画布大小,具有固定的起始宽度/高度?
- ios - 如何在短时间内存储数据?(迅速)
- r - 无法使用 KableExtra 左对齐表格列
- java - 在 Itext7 中的 pdf 末尾添加图像