您可以使用尖括号为通用类(对函数使用相同的语法)指定类型约束(使用类和协议):
class Foo<T: Equatable, U: Comparable> { }要在单个类型上指定多个需求,请使用
where子句:
class Foo<T: UIViewController where T: UITableViewDataSource, T: UITextFieldDelegate> { }但是,您似乎无法在泛型参数子句中指定可选要求,因此一种可行的解决方案是创建一个协议,使所有数字类型都通过扩展来实现,然后将类限制为该要求:
protocol Numeric { }extension Float: Numeric {}extension Double: Numeric {}extension Int: Numeric {}class NumberCruncher<C1: Numeric> { func echo(num: C1)-> C1 { return num }}NumberCruncher<Int>().echo(42)NumberCruncher<Float>().echo(3.14)


