[swift-users] Overriding properties with limited availability

Jordan Rose jordan_rose at apple.com
Wed Aug 2 16:21:11 CDT 2017


Oops, I didn't notice that my own deployment target was already set to iOS 11. I see what you're seeing now. Can you file a bug for this at https://bugs.swift.org <https://bugs.swift.org/> ?

Workaround: put the override in an extension, and put the availability on the extension declaration. That seems to work for me.

Sorry for the trouble!
Jordan


> On Aug 2, 2017, at 14:12, Rod Brown <rodney.brown6 at icloud.com> wrote:
> 
> Jordan,
> 
> So sorry, my snippet really wasn’t helpful there! Gah.  I realise the extension wasn’t right! Sorry *facepalm*.
> 
> So I have a project. Its deployment target is iOS 10 (because we need 10.0 compatibility for the foreseeable future).
> 
> If I add the following code I get errors when it builds:
> 
> class MyViewControllerSubclass: UIViewController {
>     
>     @available(iOS, introduced: 11.0)
>     override var additionalSafeAreaInsets: UIEdgeInsets {
>         didSet {
>             // Need to do work here
>         }
>     }
>     
> }
> 
> <Screen Shot 2017-08-03 at 7.08.24 am.png>
> 
> My only solution at this stage is currently to KVO on the AdditionalSafeAreaInsets property, which works, but this seems to point out a language deficiency.
> 
> 
> Thanks
> 
> 
>> On 3 Aug 2017, at 3:24 am, Jordan Rose <jordan_rose at apple.com <mailto:jordan_rose at apple.com>> wrote:
>> 
>> I'm not sure why you're using 'override' in an extension. Did you mean to put that in a subclass? It seems to work for me there.
>> 
>> Yes, Swift will not let you replace existing methods/properties using an extension if it can statically see that the method/property already exists. (It's not even safe to do that in Objective-C, but the language doesn't stop you.)
>> 
>> Jordan
>> 
>> 
>>> On Aug 1, 2017, at 22:46, Rod Brown via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>>> 
>>> Looks like this is a duplicate of this issue:
>>> 
>>> https://bugs.swift.org/browse/SR-1486 <https://bugs.swift.org/browse/SR-1486>
>>> 
>>> I’m curious if anyone knows whether that is actually a bug, or a behavioural choice on Swift’s part?
>>> 
>>> 
>>>> On 2 Aug 2017, at 10:31 am, Rod Brown via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>>>> 
>>>> Hi everyone,
>>>> 
>>>> Something I’ve come across in iOS 11 is that you can’t override properties that are only available on iOS 11 when deploying with a deployment target less than the current target.
>>>> 
>>>> For example the following code is invalid:
>>>> 
>>>> extension UIViewController {
>>>>     
>>>>     @available(iOS, introduced: 11.0)
>>>>     open override var additionalSafeAreaInsets: UIEdgeInsets {
>>>>         didSet {
>>>>             // Do work here only relevant to iOS 11
>>>>         }
>>>>     }   
>>>> }
>>>> 
>>>> This would be easily overridden in Obj-C, but I can’t do it in Swift. Is there any reason why this limitation exists?
>>>> 
>>>> Thanks,
>>>> 
>>>> Rod
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users at swift.org <mailto:swift-users at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>>> 
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users at swift.org <mailto:swift-users at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>> 
> 

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


More information about the swift-users mailing list