I was not talking about the formatting. I am talking about the implementation.
You can't use `self` before you call `super.init` as you did now. If changing your implementation to called `super.init` and then call `self` in `super.init` again. You would have called `super.init` twice. I don't know what that means. But it smells bad. Zhaoxin On Sun, Jun 4, 2017 at 12:51 PM, Geordie Jay <geo...@gmail.com> wrote: > Thanks for the amendment, and sorry for the (lack of) formatting. I > painstakingly typed that on my phone with manually-spaced indenting, which > the Inbox app unhelpfully removed entirely when I pressed send. Pasting > into Xcode should do the trick though.. > > Geordie > > On Sun 4. Jun 2017 at 14:49, Zhao Xin <owe...@gmail.com> wrote: > >> You should change to another way. Using `self` in `super.init` is not >> allowed. >> >> Zhaoxin >> >> On Sun, Jun 4, 2017 at 12:38 PM, Geordie Jay <geo...@gmail.com> wrote: >> >>> I am dealing with a variant of this on Android right now. I have just >>> subclassed e.g. UITapGestureRecognizer to perform the 2nd variant above and >>> externally accept a closure as its argument. I'm writing this on my phone >>> so forgive any syntax errors or accidental omissions: >>> >>> class TapGestureRecognizer: UITapGestureRecognizer { >>> var onTap: (() -> Void)? >>> init(onTap: (() -> Void)?) { >>> self.onTap = onTap >>> super.init(target: self, action: #selector(internalTapHandler)) >>> } >>> >>> @objc private func internalTapHandler() { >>> onTap?() >>> } >>> } >>> >>> class Baz: Foo { >>> init() { >>> let tapRecognizer = TapGestureRecognizer(onTap: self.bar) >>> } >>> } >>> >>> >>> Cheers, >>> Geordie >>> >>> On Sat 3. Jun 2017 at 16:53, Nate Birkholz via swift-users < >>> swift-users@swift.org> wrote: >>> >>>> 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 <owe...@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@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@swift.org >>>>>> https://lists.swift.org/mailman/listinfo/swift-users >>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Nate Birkholz >>>> _______________________________________________ >>>> 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