协议Swift中默认参数的替代

时间:2019-05-11 07:37:58

标签: swift

我了解协议中不允许使用默认参数,这意味着以下无效:

protocol testProtocol {
    func testFunc (_ a: String, _ b: String? = nil)
}

所以我知道b在下面的声明中仍然可以是可选的

protocol testProtocol {
    func testFunc (_ a: String, _ b: String?)
}

我的班级可以遵守此协议:

class TestIt: testProtocol {
    func testFunc(_ a: String, _ b: String?) {
        print ("Do stuff with a and b")
    }
}

但是我想用以下声明调用此函数:

let test = TestIt()

    test.testFunc("a")

这不可避免地无法编译,解决方案似乎是

let test = TestIt()
test.testFunc("a", nil)

但是,将nil传递给函数似乎并不是一种快速的方法。

请注意,这只是一个最小的示例,尚不适合生产,只是为了确定解决方案中传递nil的一般问题的解决方案。

我可以不使用nil来调用testFunc吗?

1 个答案:

答案 0 :(得分:4)

您可以这样做:

protocol TestProtocol {
    func testFunc (_ a: String, _ b: String?)
}

extension TestProtocol {
    func testFunc (_ a: String) {
        self.testFunc(a, nil)
    }
}