协议
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。