[swift-users] Problem with Access Control and Extensions

Rick Aurbach rlaurb at icloud.com
Wed Sep 20 14:41:17 CDT 2017


I am trying to write an extension to a UIKit class, but am running into a can’t-win situation:

The code I ‘want’ to write looks like:


public extension UISplitViewController {
	override public func viewDidLoad() {
		super.viewDidLoad()
		if UIDevice.current.userInterfaceIdiom == .pad {
			preferredDisplayMode = .automatic
		} else {
			preferredDisplayMode = .primaryOverlay
		}
	}
}

This generates the error message 
/Users/rlaurb/Projects/Cooks-Memory/Cooks-Memory/AppDelegate.swift:131:23: Overriding instance method must be as accessible as the declaration it overrides
/Users/rlaurb/Projects/Cooks-Memory/Cooks-Memory/AppDelegate.swift:131:23: Overridden declaration is here (UIKit.UIViewController)

But I can’t change the access control of the function to ‘open’, because I get the warning that the function can’t be “more” accessible than the extension.

And I can’t change the extension’s access to ‘open’ because apparently extensions can’t be open.

Now I don’t want to get into a debate about whether this code works — it’s just an experiment — but is it even possible to express this idea?? I.e., is it possible to express this idea without subclassing?

Cheers,

Rick Aurbach

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170920/abc53f5a/attachment.html>


More information about the swift-users mailing list