gpt4 book ai didi

swift - 需要澄清 Swift 中的 "@objc class"

转载 作者:行者123 更新时间:2023-11-28 07:01:09 25 4
gpt4 key购买 nike

我了解“@objc”属性对协议(protocol)的作用。我不明白的是为什么要将它添加到类中,例如在下面的示例中:

@objc protocol CounterDataSource {
optional func incrementForCount(count: Int) -> Int
optional var fixedIncrement: Int { get }
}

@objc class Counter {
var count = 0
var dataSource: CounterDataSource?
func increment() {
if let amount = dataSource?.incrementForCount?(count) {
count += amount
} else if let amount = dataSource?.fixedIncrement {
count += amount
}
}
}

这是它在 Apple 的 Swift 文档中的陈述:

Note also that @objc protocols can be adopted only by classes, and not by structures or enumerations. If you mark your protocol as @objc in order to specify optional requirements, you will only be able to apply that protocol to class types.

没有“@objc class..”的解释,只有“@objc protocol”。

最佳答案

关于 this page , 它说

If you apply the objc attribute to a class or protocol, it’s implicitly applied to the members of that class or protocol. The compiler also implicitly adds the objc attribute to a class that inherits from another class marked with the objc attribute. Protocols marked with the objc attribute can’t inherit from protocols that aren’t.

因此,不同之处在于它隐含地适用于所有成员。此外,您将无法将 @objc 添加到泛型类。

关于swift - 需要澄清 Swift 中的 "@objc class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020741/

25 4 0
文章推荐: html - 如何对齐背景图像?
文章推荐: swift - 无法将 JSON 类型的值下标到 Swift 中 JSON 类型错误的索引
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com