淺析Strideable協(xié)議

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

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

//偽代碼

var date = NSDate()

date = date + 3600? ? //3600秒 = 1小時(shí)

date += 3600

我們現(xiàn)在給NSDate類(lèi)擴(kuò)展方法,并遵守Strideable協(xié)議,advancedBy()和distanceTo()這倆個(gè)方法是必須實(shí)現(xiàn),否則會(huì)報(bào)錯(cuò),告訴你沒(méi)按套路來(lái)。Strideable協(xié)議的關(guān)聯(lián)對(duì)象是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

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

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

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

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

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

var anHourLaterTime =time +3600

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

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

遵守了Strideable協(xié)議的類(lèi)型,默認(rèn)會(huì)實(shí)現(xiàn)func stride(through:by:)和func stride(to:by:)倆個(gè)函數(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)用這倆個(gè)方法實(shí)現(xiàn)增減時(shí)間效果

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容