> On Apr 11, 2016, at 10:30 AM, Matthew Johnson <matt...@anandabits.com> wrote:
> 
> 
> 
> Sent from my iPad
> 
>> On Apr 11, 2016, at 12:15 PM, Joe Groff via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> 
>>> On Apr 7, 2016, at 5:12 PM, Douglas Gregor via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> One could perhaps work around (a), (b), and (d) by allowing compound 
>>> (function-like) names like tableView(_:viewFor:row:) for properties, and 
>>> work around (c) by allowing a method to satisfy the requirement for a 
>>> read-only property, but at this point you’ve invented more language hacks 
>>> than the existing @objc-only optional requirements. So, I don’t think there 
>>> is a solution here.
>> 
>> To me, compound names for closure properties and satisfying property 
>> requirements with methods aren't hacks, they're missing features we ought to 
>> support anyway. I strongly prefer implementing those over your proposed 
>> solution. It sounds to me like a lot of people using optional protocol 
>> requirements *want* the locality of control flow visible in the caller, for 
>> optimization or other purposes, and your proposed solution makes this 
>> incredibly obscure and magical.
> 
> Do you have the same thought for optional closure properties?  If so and 
> heightForRow was an optional closure property it would satisfy all use cases 
> elegantly.  It could have a default implementation that returns nil.  When 
> non-uniform heights are required a normal method implementation can be 
> provided.  Delegates that have uniform row heights some of the time, but not 
> all of the time, would also be supported by implementing the property.

There are still some issues here:

1) It doesn’t handle optional read/write properties at all, because the setter 
signature would be different. Perhaps some future lens design would make this 
possible. For now, the workaround would have to be importing the setter as a 
second optional closure property, I guess. (The current system is similarly 
broken).

2) For an @objc protocol, you won’t actually be able to fully implement the 
optional closure property with a property of optional type, because “return 
nil” in the getter is not the same as “-respondsToSelector: returns false”. 
Indeed, the getter result type/setter parameter type should be non-optional, so 
we would (at best) need a special rule that optional closure properties of 
@objc protocols can only be implemented by non-optional properties of closure 
type or by methods.

> If we decide to favor this approach it would be really nice to be able to 
> import Cocoa delegate protocols this way.  Is that something that might be 
> feasible?


Yes. If we favor this approach, it should be fairly direct to make imported 
Objective-C protocols work this way.

        - Doug

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to