As mentioned in the title, some standard Swift protocols get away with declaring optional requirements without the use of @objc. For example:
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)
...
}
The following test failed with the expected compile error due to the missing @objc:
public protocol Test: NSObjectProtocol {
optional func test()
}