协议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的情况下调用testfunc?

您可以这样做:

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

最新更新