带委托参考的Swift默认参数值

时间:2018-07-14 14:14:28

标签: ios swift swift4

我试图在不使用任何框架的情况下在代码中进行依赖项注入,而重构时我尝试从外部传递依赖项。我现在面临的问题是默认参数值所需的委托声明。

import java.text.ParseException;

public class TestOddEvenExample {
    public static void main(String args[]) throws ParseException {

        int x = 24;
        oddEvenChecker(x);

        int xx = 3;
        oddEvenChecker(xx);
    }

    static void oddEvenChecker(int x) {
        if (x % 2 == 0)
            System.out.println("You entered an even number." + x);
        else
            System.out.println("You entered an odd number." + x);
    }
}

在以上代码段中,以上对象的创建需要从外部进行委托才能传输结果。在Swift中,他们可以在参数中声明该自引用。

从技术上讲,这时似乎没有创建self,因为这是init方法,如果没有其他实现方法,我现在想使用另一个选项。

这将创建没有委托的init(service : MYService = MYService(withDelegate: self)) { } 对象,我必须公开另一种接受委托的方法。

1 个答案:

答案 0 :(得分:0)

注入任何服务似乎是一种好方法,因为我希望MYService class也符合某些protocol,以便可以注入符合该{{1} }。对于这个问题,我想建议将委托也保留为如下所示的可注入对象,

protocol

为此,您必须公开服务init(service: MYService = MYService(), serviceDelegate: MyServiceDelegate? = nil) { if let delegate = serviceDelegate { service.delegate = delegate } else { service.delegate = self } } ,因为它在delegateSwiftUITableView等)中应该是完全正常的

我认为您想将拥有UITextField的{​​{1}}设置为默认class,所以我将service设置为delegate,以便如果没有在那里,如果不是delegate传递的optional,则该类将是委托。