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()
}
 
     
     
     
     
    