協議
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 {
// ...
}
}
Date
的 Stride
類型是 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+
相關用法
- Swift Strideable advanced(by:)用法及代碼示例
- Swift StrideThrough map(_:)用法及代碼示例
- Swift StrideTo allSatisfy(_:)用法及代碼示例
- Swift StrideTo joined(separator:)用法及代碼示例
- Swift StrideTo drop(while:)用法及代碼示例
- Swift StrideTo filter(_:)用法及代碼示例
- Swift StrideThrough reduce(_:_:)用法及代碼示例
- Swift StrideTo sorted()用法及代碼示例
- Swift StrideTo split(separator:maxSplits:omittingEmptySubsequences:)用法及代碼示例
- Swift StrideTo min()用法及代碼示例
- Swift StrideTo dropLast(_:)用法及代碼示例
- Swift StrideTo forEach(_:)用法及代碼示例
- Swift StrideThrough shuffled()用法及代碼示例
- Swift StrideTo enumerated()用法及代碼示例
- Swift StrideThrough suffix(_:)用法及代碼示例
- Swift StrideThrough prefix(_:)用法及代碼示例
- Swift StrideTo suffix(_:)用法及代碼示例
- Swift StrideThrough contains(_:)用法及代碼示例
- Swift StrideThrough split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代碼示例
- Swift StrideThrough prefix(while:)用法及代碼示例
- Swift StrideThrough sorted()用法及代碼示例
- Swift StrideTo reduce(_:_:)用法及代碼示例
- Swift StrideThrough max()用法及代碼示例
- Swift StrideTo first(where:)用法及代碼示例
- Swift StrideThrough max(by:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Strideable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。