浅析Strideable协议(Swift)

本文介绍了Swift中的Strideable协议,该协议使得类型支持连续值的增量和测量。通过为NSDate扩展并实现Strideable协议,我们可以方便地进行时间的加减操作。文章详细讲解了advancedBy()和distanceTo()方法的实现,以及如何使用stride(through:by:)和stride(to:by:)方法来增减时间并测量时间间隔。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

凡是遵守了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 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值