Re: [swift-users] Overriding properties with limited availability

2017-08-02 Thread Jordan Rose via swift-users
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  ?

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  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
> }
> }
> 
> }
> 
> 
> 
> 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 > > 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 >> > wrote:
>>> 
>>> Looks like this is a duplicate of this issue:
>>> 
>>> 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 
 > 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@swift.org 
 https://lists.swift.org/mailman/listinfo/swift-users 
 
>>> 
>>> ___
>>> swift-users mailing list
>>> swift-users@swift.org 
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> 
>> 
> 

___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


Re: [swift-users] Overriding properties with limited availability

2017-08-02 Thread Rod Brown via swift-users
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
}
}

}



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  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 > > wrote:
>> 
>> Looks like this is a duplicate of this issue:
>> 
>> 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 
>>> > 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@swift.org 
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> 
>> 
>> ___
>> swift-users mailing list
>> swift-users@swift.org 
>> https://lists.swift.org/mailman/listinfo/swift-users
> 

___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


Re: [swift-users] Overriding properties with limited availability

2017-08-02 Thread Jordan Rose via swift-users
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  
> wrote:
> 
> Looks like this is a duplicate of this issue:
> 
> 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 > > 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@swift.org 
>> https://lists.swift.org/mailman/listinfo/swift-users
> 
> ___
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


Re: [swift-users] Overriding properties with limited availability

2017-08-01 Thread Rod Brown via swift-users
Looks like this is a duplicate of this issue:

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  
> 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@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users