如何使我的通用参数符合Swift或Swift,如何找到参数的构象?

如何使我的通用参数符合Swift或Swift,如何找到参数的构象?,swift,Swift,我想构建一个接受某种协议的函数,如果其中一个协议通过,该函数应该可以工作,我对此函数有两个问题,首先我不知道如何将或应用于协议,其次我不知道如何找出函数中的传入值符合哪个协议,然后我就可以运行正确的代码了 func printFunction<T: CustomStringConvertible OR CustomDebugStringConvertible>(value: T) { // 1: issue with OR! if value.description

我想构建一个接受某种协议的函数,如果其中一个协议通过,该函数应该可以工作,我对此函数有两个问题,首先我不知道如何将应用于协议,其次我不知道如何找出函数中的传入值符合哪个协议,然后我就可以运行正确的代码了

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!")
    }
 
}
func打印函数(值:T){//1:与或有关的问题!
if value.description{//2:发现哪个协议确认是错误的!
打印(值.说明)
}
else if value.debugDescription{//3:找出哪个协议构象是错误的!
打印(value.debugDescription)
}
否则{
打印(“不可打印!”)
}
}

协议一致性没有OR运算符。协议就像一个合同,你不能遵守其中一个。你需要两者都遵守。您需要实现两种方法。每人一个。顺便说一句,使用CustomStringConvertible时无需显式输入说明:


func打印函数(值:T){print(值)}

func打印函数(值:T){print(值.debugDescription)}

协议一致性没有OR运算符,那么我想我应该为两个同名协议拆分函数,对吗?是的。您需要实现两种方法。每人一个。顺便说一句,在使用CustomStringConvertible
func printFunction(value:T){print(value)}
func printFunction(value:T){print(value.debugDescription)}
@LeoDabus:您愿意像在评论中回答的那样回答这个问题吗?我希望你能回答我的问题。
func printFunction<T: CustomStringConvertible>(value: T) { print(value) }
func printFunction<T: CustomDebugStringConvertible>(value: T) { print(value.debugDescription) }