在 Swift 2.0 中使用 Stride

Posted

技术标签:

【中文标题】在 Swift 2.0 中使用 Stride【英文标题】:Using Stride in Swift 2.0 【发布时间】:2015-11-18 18:13:03 【问题描述】:

我正在尝试弄清楚如何在 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)] )

现在,尽管有代码提示,但我无法弄清楚如何使用此功能。

任何示例都会有所帮助,谢谢。

我看过examples,但我无法掌握如何使用它。我从 Apple Docs 中得到的东西是有限的。

谢谢

【问题讨论】:

stride 是用来为内部函数生成一个数字的,所以它不能简单地用于拼接数组,因为你需要数字(开始和结束索引) @maxpovver 所以使用它是个坏主意***.com/questions/26395766/… 这取决于你@DogCoffee 其他人让我头疼 - 我已经添加了我的 KISS 方法。 【参考方案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(" ")

【讨论】:

【参考方案2】:

有点变化,这是新的语法:

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

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

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

正如@RichFox 所指出的,在 Swift 3.0 中,语法改回原来的全局函数形式,例如:

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

【讨论】:

我不知道 SwiftDoc - 奖金!谢谢 语法现在再次成为全局函数...stride(from:0, to: 10, by: 2) 例如你可以:for i in stride(from:0, to: 10, by: 2) print(i) @abhi1992 我之前没有检查过,但我认为你描述的构造函数也是在 Swift 3 中添加的。 IMO 使用 stride 仅在您不创建包含连续元素的序列时才有意义,否则我会使用 Array(1...10),因为它更短。

以上是关于在 Swift 2.0 中使用 Stride的主要内容,如果未能解决你的问题,请参考以下文章