我知道协议中不允许默认参数,这意味着以下内容无效:
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)
}
}