在Swift 2.0中使用Stride

31

我正在尝试弄清楚如何在Swift中使用Stride功能。

自Xcode 7.0 beta 6以来,它似乎又有所改变。

之前我可以使用

let strideAmount = stride(from: 0, to: items.count, by: splitSize)
let sets = strideAmount.map({ clients[$0..<advance($0, splitSize, items.count)] })

现在,尽管有代码提示,我仍然不知道如何使用这个功能。

如果有任何示例将会非常有帮助,谢谢。

我已经看过示例,但我无法理解如何使用它。从苹果文档中获取的信息很有限。

谢谢


步长用于为内部函数生成一个数字,因此它不能简单地用于拼接数组,因为您需要这两个数字(起始和结束索引)。 - maxpovver
@maxpovver,所以在这方面使用它是一个坏主意。https://dev59.com/-l8d5IYBdhLWcg3w1E90 - DogCoffee
it's up to you @DogCoffee - maxpovver
其他方法让我头疼 - 我已经加入了我的KISS方法。 - DogCoffee
2个回答

67

它有一些变化,这是新的语法:

0.stride(to: 10, by: 2)

Array(0.stride(to: 10, by: 2)) // is [0, 2, 4, 6, 8]

如果您查看此处,您可以看到哪些类型符合Strideable协议。

正如@RichFox指出的那样,在Swift 3.0中,语法改回了原始的全局函数形式,如下所示:

stride(from:0, to: 10, by: 2)

2
我之前不知道SwiftDoc - 太好了!谢谢。 - DogCoffee
1
语法现在又是全局函数了... 例如,您可以使用 stride(from:0, to: 10, by: 2)for i in stride(from:0, to: 10, by: 2) { print(i) } - Rich Fox
让我们来看看使用步长的优势,即使我们可以像我在这里提到的那样使用闭合范围和开放范围,例如 let array = Array(1...10)let array = Array(1..<10)。@DánielNagy - abhimuralidharan
1
@abhi1992 我之前没有检查过,但我认为你描述的构造函数也在 Swift 3 中添加了。在我看来,只有在不创建具有连续元素的序列时使用 stride 才有意义,否则我会使用 Array(1...10),因为它更短。 - Dániel Nagy

1

在Swift 4.2中使用stride函数

12345
 2345
  345
   45
    5
    5
   45
  345
 2345
12345


for i in 1...5{
    for k in 1...i{
        print(terminator : " ")
    }
    for j in stride(from: i, to: 6, by: 1){
        print(j , terminator : "")
    }

    print(" ")
}
for i in stride(from: 5, to: 0, by: -1)
{
    for k in 1...i{
        print(terminator : " ")
    }
    for j in stride(from: i, to: 6, by: 1){
        print(j,terminator : "")
    }
    print(" ")
}
1 2 3 4 5
 2 3 4 5
  3 4 5
   4 5
    5
    5
   4 5
  3 4 5
 2 3 4 5
1 2 3 4 5
for i in 1...5{
    for k in 0...i{
        print(terminator : " ")
    }
    for j in stride(from: i, to: 6, by: 1){
        print(j , terminator : " ")
    }

    print(" ")
}

for i in stride(from: 6, to: 1, by: -1){
    for k in 1...i{
        print(terminator : " ")
    }
    for j in stride(from: i-1, to: 6, by: 1){
        print(j , terminator : " ")
    }

    print(" ")
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接