gpt4 book ai didi

ios - 这些协议(protocol)定义之间有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 08:33:24 24 4
gpt4 key购买 nike

最近对swift中协议(protocol)的定义方式有点迷惑。

协议(protocol) OneDelegate : 类

协议(protocol) OneDelegate : NSObjectProtocol

@objc protocol OneDelegate

@class_protocol 协议(protocol) OneDelegate

我们是否应该继续使用 weak 作为委托(delegate)?或者喜欢 unowned(unsafe) var dataSource: UITableViewDataSource?

感谢您的帮助!

最佳答案

第一个和最后一个实际上是一样的。两者都指定协议(protocol)只能被类采用,即结构不能采用协议(protocol)。首选 protocol OneDelegate : class 形式。并且 @class_protocol protocol OneDelegate 已弃用。

第二种情况是一种扩展现有协议(protocol)的方法。举例来说,您希望您的 UITableViewDelegate 响应长按,那么您可以定义一个协议(protocol):

protocol UITableViewDelegateWithRecognizer: UITableViewDelegate {
func longPressed()
}

然后符合协议(protocol) UITableViewDelegateWithRecognizer 需要符合所有 UITableViewDelegate 函数,加上额外的方法 longPressed

如果您打算在用 Objective-C 编写的文件中使用该协议(protocol),则需要使用 @objc。此外,如果您想要一个可选的函数声明,您需要使用 @objc

最后,用于内存管理的相同 ARC 规则适用于 Swift 和 Objective-C,因此您通常需要使用 weak 说明符。需要注意的是,很多 Swift 对象都是值类型,而不是引用类型。而且您不能对值类型进行弱引用。因此,如果您需要使用弱引用来避免保留循环,那么您必须指定该协议(protocol)是一个类协议(protocol),即您的第一个示例。

关于ios - 这些协议(protocol)定义之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32515026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com