【发布时间】:2014-06-06 02:15:13
【问题描述】:
我试图弄清楚如何为泛型类(在 Swift 中)实现类型约束,它将泛型类型限制为仅限数字类型。例如 Double、Int 等,但不是字符串。感谢您的帮助。
【问题讨论】:
我试图弄清楚如何为泛型类(在 Swift 中)实现类型约束,它将泛型类型限制为仅限数字类型。例如 Double、Int 等,但不是字符串。感谢您的帮助。
【问题讨论】:
您可以使用尖括号为泛型类(同样的语法适用于函数)指定类型约束(使用类和协议):
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)
【讨论】:
Strideable 是每个标准数字类型都符合的最小标准协议,但它也有更多的类型符合它。
http://swiftdoc.org/protocol/Strideable/hierarchy/
或者你可以使用IntegerType和FloatingPointType。
【讨论】:
Integer 而不是 IntegerType