我想建立一个接受某种协议的函数,如果其中一个协议通过,函数应该工作,我对这个函数有2个问题,首先我不知道如何应用或协议,其次,我不知道如何才能找到函数内的传入值符合哪个协议,然后我可以运行正确的代码!
func printFunction<T: CustomStringConvertible OR CustomDebugStringConvertible>(value: T) { // 1: issue with OR!
if value.description { // 2: issue with finding out which protocol conformation is!
print(value.description)
}
else if value.debugDescription { // 3: issue with finding out which protocol conformation is!
print(value.debugDescription)
}
else {
print("not printable!")
}
}
协议一致性没有OR操作符。协议就像一个你不能遵守的合同。你需要两者都符合。您需要实现两个方法。每人一个。顺便说一句,当使用CustomStringConvertible:
时,不需要显式地键入描述。func printFunction<T: CustomStringConvertible>(value: T) { print(value) }
func printFunction<T: CustomDebugStringConvertible>(value: T) { print(value.debugDescription) }