首页 > 解决方案 > 非'@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一开始就是。

标签: iosswift

解决方案


问题是您在协议扩展中定义这些方法。这用于定义协议的“默认实现”(即,如果一个类型没有实现该方法,则将调用该协议的实现)。

但是 Objective-C 没有协议默认实现的概念。@objc因此,将协议声明为并在 Swift 协议扩展中具有默认实现是没有意义的。符合此协议的 Objective-C 类将永远无法享受这些 Swift 默认实现。


推荐阅读