淺析Strideable協(xié)議

凡是遵守了Strideable協(xié)議的類型,理論上都是連續(xù)的,在單一維度上的值能夠被抵消和測量,支持整型,浮點型和索引值,Strideable協(xié)議繼承于 Comparable。

假如我們想實現(xiàn)穿越到指定的時間,例如1個小時之后。

//偽代碼

var date = NSDate()

date = date + 3600? ? //3600秒 = 1小時

date += 3600

我們現(xiàn)在給NSDate類擴(kuò)展方法,并遵守Strideable協(xié)議,advancedBy()和distanceTo()這倆個方法是必須實現(xiàn),否則會報錯,告訴你沒按套路來。Strideable協(xié)議的關(guān)聯(lián)對象是Stride,遵守SignedNumberType協(xié)議。

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

這樣我們就可實現(xiàn)通過加法(+)運算符任意地增加時間了,或減法(-)運算符減去時間。

我們也可以調(diào)用advancedBy()函數(shù)實現(xiàn)增減效果。

time.advancedBy(3600)? //增加1小時

time.advancedBy(-3600)? //減少1小時

我們還可以用distanceTo()測量距離或是間隔,比如說:求

var anHourLaterTime =time +3600

var distance = time.distanceTo(anHourLaterTime)? ? //anHourLaterTime - time

print(distance)? ? ? ? ? //距離為3600

遵守了Strideable協(xié)議的類型,默認(rèn)會實現(xiàn)func stride(through:by:)和func stride(to:by:)倆個函數(shù)

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

? ? ? returndateByAddingTimeInterval(stride)

}

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

? ? ? returndateByAddingTimeInterval(stride)

}

也可以調(diào)用這倆個方法實現(xiàn)增減時間效果

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容