凡是遵守了Strideable协议的类型,理论上都是连续的,在单一维度上的值能够被抵消和测量,支持整型,浮点型和索引值,
Strideable协议继承于 Comparable。
假如我们想实现穿越到指定的时间,例如1个小时之后。
//伪代码
var
date =
NSDate
()
date = date + 3600 //3600秒 = 1小时
date += 3600
我们现在给
NSDate类扩展方法,并遵守
Strideable协议,
advancedBy()和distanceTo()这俩个方法是必须实现,否则会报错,告诉你没按套路来。
Strideable
协议的关联对象是
Stride,遵守
SignedNumberType协议。
extension
NSDate
:
Strideable
{
public func advancedBy(n: NSTimeInterval) ->Self {
return
dateByAddingTimeInterval
(n)
}
public
func
distanceTo(other:
NSDate
) ->
NSTimeInterval
{
return
other.
timeIntervalSinceDate
(
self
)
}
}
var
time =
NSDate
()
time
=
time
+
60.00
time
+=
60
这样我们就可实现通过加法(+)运算符任意地增加时间了,或减法(-)运算符减去时间。
我们也可以调用
advancedBy()函数实现增减效果。
time
.
advancedBy
(
3600
) //增加1小时
time
.
advancedBy
(-
3600
) //减少1小时
我们还可以用distanceTo()测量距离或是间隔,比如说:求
var
anHourLaterTime =
time
+
3600
var
distance =
time
.
distanceTo
(
anHourLaterTime
) //
anHourLaterTime - time
print
(
distance
)
//距离为3600
遵守了Strideable协议的类型,默认会实现
func stride(through:by:)和func stride(to:by:)
俩个函数
func
stride(through end:
NSDate
, by stride:
NSTimeInterval
) ->
NSDate
{
return
dateByAddingTimeInterval(stride)
}
func stride(to end:NSDate, by stride:NSTimeInterval) ->NSDate {
return
dateByAddingTimeInterval(stride)
}
也可以调用这俩个方法实现增减时间效果
time
.
stride
(through:
NSDate
(), by: 360
0
)
time
.
stride
(to:
NSDate
(), by: 360
0
)