更新时间:2018-09-25 15:47作者:王华老师
如何实现?
答案:在Swift2.0中,泛类型可以使用类型约束条件被强制扩展。但是假如这个泛类型不满足这个类型的约束条件,那么这个扩展方法既不可见也无法调用。
所以countUniques全局函数可以作为Array的扩展方法被重写如下:
extensionArraywhereElement:Comparable{
funccountUniques()->Int{
letsorted=sort(<)
letinitial:(Element?,Int)=(.None,0)
letreduced=sorted.reduce(initial){($1,$0.0==$1?$0.1:$0.1+1)}
returnreduced.1
}
}
注意:只有元类型实现了Comparable协议新的方法才可以被使用。例如,如果你在全部是UIView对象的数组中调用countUniques,编译器将会报错。
importUIKit
leta=[UIView(),UIView()]
a.countUniques()//compilererrorherebecauseUIViewdoesn'timplementComparable
问题5-Swift2.0orlater
下面一个函数的功能是计算两个double(optional)类型的数的相除的结果。在执行除法之前,必须提前满足三个条件:
被除数必须包含nil值
除数必须为包含nil值
除数不能为零
funcdivide(dividend:Double?,bydivisor:Double?)->Double?{
ifdividend==.None{
return.None
}
ifdivisor==.None{
return.None
}
ifdivisor==0{
return.None
}
returndividend!/divisor!
}
上面的函数可以正常使用,但是会存在两个问题: