我了解协议中不允许使用默认参数,这意味着以下无效:
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吗?
答案 0 :(得分:4)
您可以这样做:
protocol TestProtocol {
func testFunc (_ a: String, _ b: String?)
}
extension TestProtocol {
func testFunc (_ a: String) {
self.testFunc(a, nil)
}
}