你能严格泛型类型或给一个参数多于一种类型吗?

Can you Strict Generic types or give one parameter more than one type ?

例如,我想指定一个可能是 IntegerString 的类型,并将其用作 func 中的特殊类型 我试过 typealias 但它不会解决这个问题,因为 typealiases 不能有 or 参数,因为它只使用 & 因此考虑下面的情况。

typealias alis = StringProtocol & Numeric


func foo <T: alis> (vee: T) -> T{
// do something
    return vee
}

我希望这个 func 接受参数类型(IntString)而不是其他任何类型(<T>),

如您所见,我尝试使用 typealias 并且没有编译错误。

但是尝试使用该功能会导致这些错误。

foo(vee: 1) //Argument type 'Int' does not conform to expected type 'StringProtocol'

foo(vee: "v") //Argument type 'String' does not conform to expected type 'Numeric'

这可以用 swift 实现吗?如果是这样的话。

假设您可以使用 OR 运算符来组合协议,您可以用 (Int | String) 类型的东西做什么?

并非您可以对 Int 执行的所有操作都可以在 (Int | String) 上完成,因为它可能是一个潜在的字符串。同样,并非您可以对 String 执行的所有操作都可以在 (Int | String) 上完成,因为它可能是 Int 的基础。

现在你可能会说 "Ah. I know that Int and String both have a description property. I should be able to access description on a variable of type (Int | String)."

好吧,那样的话,你可以自己创建这样一个协议,并且只有 IntString 符合它:

protocol IntOrString {
    var description: String { get }
}

extension Int : IntOrString {}
extension String : IntOrString {}

(注意description已经在CustomStringConvertible中定义了。为了论证,假设它不存在。)