gpt4 book ai didi

ios - 某些 iOS 框架如何使用不带 @objc 的可选来定义 Swift 协议(protocol)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:03 24 4
gpt4 key购买 nike

如标题中所述,一些标准 Swift 协议(protocol)无需使用 @objc 即可声明可选要求。例如:

public protocol UIScrollViewDelegate : NSObjectProtocol {

@available(iOS 2.0, *)
optional public func scrollViewDidScroll(_ scrollView: UIScrollView) // any offset changes
@available(iOS 3.2, *)
optional public func scrollViewDidZoom(_ scrollView: UIScrollView) // any zoom scale changes
...
}


public protocol UIApplicationDelegate : NSObjectProtocol {
...
@available(iOS 2.0, *)
optional public func applicationDidBecomeActive(_ application: UIApplication)

@available(iOS 2.0, *)
optional public func applicationWillResignActive(_ application: UIApplication)
...
}

由于缺少@objc,以下测试失败并出现预期的编译错误:

public protocol Test: NSObjectProtocol {
optional func test()
}

最佳答案

Optional 协议(protocol)方法选项仅适用于基于 Objective-C 的协议(protocol)。 UIScrollViewDelegateUIApplicationDelegate 是基于 Objective-C 的协议(protocol)。这意味着您不需要说出它的 @objc。您看到的代码是 Objective-C 和 Swift 之间的桥接文件。这样 Swift 就可以访问这些方法。您的协议(protocol) Test 是在 Swift 中定义的。即使您调整 NSObjectProtocol,该类也不会暴露给 Objective-C runtime,其中 optional 可用。出于这个原因,您需要使用 @objc 明确提及此协议(protocol)公开给 Objective-C

关于ios - 某些 iOS 框架如何使用不带 @objc 的可选来定义 Swift 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161888/

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