[swift-users] Calling default implementation of protocol methods as selectors

Nate Birkholz nbirkholz at gmail.com
Sat Jun 3 00:10:04 CDT 2017


Thanks, the second had occurred to me, but felt a little too much like in
practice it would make the code harder to understand.

On Fri, Jun 2, 2017 at 9:58 PM, Zhao Xin <owenzx at gmail.com> wrote:

> I found two workarounds.
>
> 1.
>
> protocol Foo: class {
>
>     func bar()
>
> }
>
>
> class Base:Foo {
>
>     @objc func bar() {
>
>         print("bar")
>
>     }
>
> }
>
>
> class Baz: Base {
>
>     override init() {
>
>         super.init()
>
>         let tapRecognizer = UITapGestureRecognizer(target: self, action:
> #selector(bar))
>
>     }
>
> }
>
> 2.
>
> protocol Foo: class {
>
>     func bar()
>
> }
>
>
> extension Foo {
>
>     func bar() {
>
>         print("bar")
>
>     }
>
> }
>
>
> class Baz: Foo {
>
>     init() {
>
>         let tapRecognizer = UITapGestureRecognizer(target: self, action:
> #selector(delegate))
>
>     }
>
>
>
>     @objc func delegate() {
>
>         bar()
>
>     }
>
> }
>
>
> Zhao Xin
>
>
>
>
>
>
> On Sat, Jun 3, 2017 at 10:35 AM, Nate Birkholz via swift-users <
> swift-users at swift.org> wrote:
>
>> protocol Foo: class {
>>     func bar()
>> }
>>
>> extension Foo {
>>     func bar() {
>>          print("bar")
>>     }
>> }
>>
>> class Baz: Foo {
>>     init() {
>>         let tapRecognizer = UITapGestureRecognizer(target: self, action:
>> #selector(bar))
>>     }
>> }
>>
>> the #selector tells me: "Argument of '#selector' refers to instance
>> method 'bar()' that is not exposed to Objective-C" and asks me to add @objc
>> to the method definition.
>>
>> Adding @objc to the method tells me: "@objc can only be used with members
>> of classes, @objc protocols, and concrete extensions of classes"
>>
>> Adding @objc to the protocol doesn't fix it, just introduces new issues.
>>
>> "dynamic" cannot be applied to a protocol, so cannot be used
>> alternatively.
>>
>> Is there a way to get around this? If a method is called by a gesture
>> recognizer, is there no way to have a default protocol implementation? I'd
>> like to use default implementations if possible to make my code more DRY.
>>
>> Is there a roadmap/plan for swift-native selector dispatch?
>>
>> Thanks. I look forward to the inevitable reply revealing the dumb thing I
>> missed. :)
>>
>> --
>> Nate Birkholz
>>
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
>>
>>
>


-- 
Nate Birkholz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170602/8055408e/attachment.html>


More information about the swift-users mailing list