Thank you, Adrian. 

(What I meant by “debating the correctness of my code” was that I wanted to 
talk about the approach and not about the content of the viewDidLoad() method.)


Cheers,

Rick Aurbach

> On Sep 20, 2017, at 3:13 PM, Adrian Zubarev <adrian.zuba...@devandartist.com> 
> wrote:
> 
> I don’t get your problem here. If you don’t want to debate the correctness of 
> your code, why are you asking for help or even showing error messages for a 
> code snippet that cannot work?
> 
> 1. Drop the access modifier from the extension itself, because this is only 
> for convenience, which may or may not rule over the members of the extension 
> members. If you’re already explicitly setting the access modifier on the 
> extension members then the convenience access modifier makes no sense.
> 2. The code cannot work, because you cannot override `viewDidLoad` on a class 
> that you don’t own, on a subclass of `UISplitViewController` that would be 
> possible.
> 
> ```
> class MySplitViewController : UISplitViewController {}
> 
> extension MySplitViewController {
>       override open func viewDidLoad() {
>               super.viewDidLoad()
>               /* ... */
>       }
> }
> ```
> 
> Am 20. September 2017 um 21:41:31, Rick Aurbach via swift-users 
> (swift-users@swift.org <mailto:swift-users@swift.org>) schrieb:
> 
>> 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
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org <mailto:swift-users@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users 
>> <https://lists.swift.org/mailman/listinfo/swift-users>
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to