浅析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)
    }

    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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值