是否可以在协议中告知/声明函数参数标签(而不是函数参数名称)?
或者它总是在采用类型和/或扩展中完成吗?
答案 0 :(得分:1)
声明协议时,必须声明函数的参数。这是当您选择函数的参数/数量时,而不是稍后。
协议就像合同。在使用之前已经确定了绑定部分。
当一个对象符合协议时,它必须在你声明它们时使用它的功能,没有添加/更改/删除参数的选项。
使用这样的协议,例如:
protocol Juggling {
func juggle(object: String, number: Int)
func launch(object: String, howMany number: Int)
}
符合协议的对象必须使用声明的函数:
struct Juggler: Juggling {
let name: String
func juggle(object: String, number: Int) {
print("Juggling \(number) x \(object)")
}
func launch(object: String, howMany number: Int) {
print("Launching \(number) x \(object)")
}
}
在来电方面,你必须宣布他们:
let joe = Juggler(name: "Joe")
joe.launch(object: "baton", howMany: 2)
joe.juggle(object: "ball", number: 5)
例如,你不能在调用者方面使用带有“number”而不是“howMany”的launch
方法,它将不再符合协议。
使用协议扩展时的规则相同:
protocol Juggling {
func juggle(object: String, number: Int)
func launch(object: String, howMany number: Int)
}
extension Juggling {
func juggle(object: String, number: Int) {
print("Juggling \(number) x \(object)")
}
func launch(object: String, howMany number: Int) {
print("Launching \(number) x \(object)")
}
}
struct Juggler: Juggling {
let name: String
}
let joe = Juggler(name: "Joe")
joe.launch(object: "baton", howMany: 2)
joe.juggle(object: "ball", number: 5)
例如,如果您尝试使用
joe.launch(object: "baton", number: 2)
而不是
joe.launch(object: "baton", howMany: 2)
在调用者方面,Xcode实际上会显示修复信息,并建议更换参数名称。