當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift Strideable用法及代碼示例

協議

Strideable

表示可以偏移和測量的連續的一維值的類型。

聲明

protocol Strideable : Comparable

概述

您可以將符合Strideable 協議的類型與stride(from:to:by:)stride(from:through:by:) 函數一起使用。例如,您可以使用 stride(from:to:by:) 來迭代浮點值的間隔:


for radians in stride(from: 0.0, to: .pi * 2, by: .pi / 2) {
    let degrees = Int(radians * 180 / .pi)
    print("Degrees: \(degrees), radians: \(radians)")
}
// Degrees: 0, radians: 0.0
// Degrees: 90, radians: 1.5707963267949
// Degrees: 180, radians: 3.14159265358979
// Degrees: 270, radians: 4.71238898038469

這些函數的最後一個參數是關聯的Stride 類型——該類型表示任意兩個Strideable 類型實例之間的距離。

具有整數Stride 的類型可以用作可數範圍的邊界或可迭代的one-sided 範圍的下限。例如,您可以遍曆Int 的範圍並使用序列和集合方法。


var sum = 0
for x in 1...100 {
    sum += x
}
// sum == 5050


let digits = (0..<10).map(String.init)
// ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

符合 Strideable 協議

要將Strideable 一致性添加到自定義類型,請選擇可以表示兩個實例之間距離的Stride 類型並實現advanced(by:)distance(to:) 方法。例如,這個假設的 Date 類型將其值存儲為 2000 年 1 月 1 日之前或之後的天數:


struct Date: Equatable, CustomStringConvertible {
    var daysAfterY2K: Int


    var description: String {
        // ...
    }
}

DateStride 類型是 Int ,從 advanced(by:)distance(to:) 的參數和返回類型推斷:


extension Date: Strideable {
    func advanced(by n: Int) -> Date {
        var result = self
        result.daysAfterY2K += n
        return result
    }


    func distance(to other: Date) -> Int {
        return other.daysAfterY2K - self.daysAfterY2K
    }
}

Date 類型現在可以與 stride(from:to:by:)stride(from:through:by:) 函數一起使用,並作為可迭代範圍的邊界。


let startDate = Date(daysAfterY2K: 0)   // January 1, 2000
let endDate = Date(daysAfterY2K: 15)    // January 16, 2000


for date in stride(from: startDate, to: endDate, by: 7) {
    print(date)
}
// January 1, 2000
// January 8, 2000
// January 15, 2000

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Strideable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。