【发布时间】:2020-08-01 07:54:34
【问题描述】:
我想做这样的事情:
let sequence1 = stride(from: Int32(2), by: 2)
for (i, address) in zip(sequence1, addresses) {
sqlite3_bind_int64(stmt, i, address.userID)
sqlite3_bind_int(stmt, i+1, address.deviceID)
}
但是stride(from:by:) 不存在。
我知道我可以将第一行改为:
let sequence1 = stride(from: Int32(2), through: Int32.max, by: 2)
或到:
let sequence1 = sequence(first: Int32(2), next: { $0 + 2 })
而且我知道 Swift 的范围是单向的,例如 PartialRangeFrom,但是 Swift 有单向的跨步吗?
相关:
【问题讨论】:
-
您也可以使用
for (i, address) in zip(1..., addresses),然后使用2*i和2*i+1。 – 不,我不认为 Swift 有片面的进步。 -
let seq1 = (1...).lazy.map { $0 * 2 }是另一种解决方法。 -
@MartinR 别介意我有他的最后一个问题
zip(Int32(1)..., addresses) -
在这种特殊情况下,迭代次数也是已知的,所以
let seq1 = stride(from: 2, to: 2 + 2 * addresses.count, by: 2)也可以工作。 -
太棒了!谢谢@MartinR,感谢您提供所有其他选项。 :-)