我想延长基本类型,如Int,Double,Float...更灵活的特性,使之在我的应用程序在图表中呈现的.例如,我制作的图表绘制仅适用于显示Int但不能真正显示Float.我想确保当我将参数传递给此视图时它将正确显示.
所以我制作了一个协议(这个例子就是这样的):
protocol SimplyChartable {
static func max(_ dataSet: [SimplyChartable]) -> SimplyChartable
}
Run Code Online (Sandbox Code Playgroud)
然后为某些类型进行扩展:
extension Int: SimplyChartable { }
extension Double: SimplyChartable { }
extension Float: SimplyChartable { }
Run Code Online (Sandbox Code Playgroud)
等等 ...
这将是所有数字类型,每当我将它作为数字类型传递给func我时,我需要像这样扩展所有扩展:
public static func max(_ dataSet: [SimplyChartable]) -> SimplyChartable {
return (dataSet as? [Int])?.max() ?? 0
}
Run Code Online (Sandbox Code Playgroud)
但对于Doublefunc将是相同的.
因此,对于min,我将最终得到类似的功能,对于除法,添加,一些其他数学也是如此...有一种方法可以将其写入一次并重用于扩展此协议的每种类型?
我发现:
let dataType = type(of: maxValue) /* where `maxValue` is SimplyChartable*/
Run Code Online (Sandbox Code Playgroud)
将原始类型返回为rawValue.但是方法的输出type(of …