浅析Strideable协议

凡是遵守了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)

      }

      publicfunc 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 {

      returndateByAddingTimeInterval(stride)

}

func stride(to end:NSDate, by stride:NSTimeInterval) ->NSDate {

      returndateByAddingTimeInterval(stride)

}

也可以调用这俩个方法实现增减时间效果

time.stride(through:NSDate(), by: 3600)

time.stride(to:NSDate(), by: 3600)

你可能感兴趣的:(浅析Strideable协议)