如何在线声明委托?

问题描述 投票:0回答:1

在Java中,有一种模式可以在其中直接声明一个委托,而不是使父类符合该接口:

例如:

public class MyClass {

    interface Delegate {
        void completion(Boolean succeeded);
    }

    void doSomething(Delegate delegate) {
        //...
    }

    void myMethod() {

        doSomething(new Delegate() { // <-- declared in-line
            @Override
            public void completion(Boolean succeeded) {
                // ...
            }
        });
    }
}

在Swift中,我可以使MyClass符合Delegate协议,并在类级别覆盖委托方法。我该如何像Java模式一样内联?

swift delegates
1个回答
0
投票

这是我想您想要的两个变体,第一个仅带有闭包

class MyClass {
    typealias Completion = (Bool) -> ()

    func myMethod(completion: Completion) {
        var isCool = false
        //some code...
        completion(isCool)
    }
}

第二个是带有协议的,我跳过了doSomething方法,但是当然可以很容易地添加它]]

protocol Delegate {
    func completion(_ flag: Bool) -> ()
}

class MyClass2 {

    func myMethod(_ delegate: Delegate) {
        var isCool = false
        //some code...
        delegate.completion(isCool)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.