一尘不染

通用类型约束仅适用于数字类型

swift

我试图弄清楚如何为通用类(在Swift中)实现类型约束,它将通用类型限制为仅数字类型。例如Double,Int等,但不是字符串。谢谢你的帮助。


阅读 294

收藏
2020-07-07

共1个答案

一尘不染

您可以使用尖括号为通用类(对函数使用相同的语法)指定类型约束(使用类和协议):

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)
2020-07-07