Проблема с stride(from:through:by:)
заключается в том, что она включает в себя то окончательное значение, которое указано для through
. Рассмотрим:
let strings = ["foo", "bar", "baz"]
for index in stride(from: 0, through: strings.count, by: 1) {
print(index)
}
Это выведет четыре значения (!):
0
1
2
3
Если вы попытались использовать этот индекс в качестве индекса в массиве .. .
for index in stride(from: 0, through: strings.count, by: 1) {
print(index, strings[index])
}
... это сработало бы для первых трех индексов, но четвертый потерпит неудачу, поскольку в массиве всего три элемента:
0 foo
1 bar
2 baz
Fatal error: Index out of range
Вы можете решить это с помощью to
, вместо этого, шаг до, но не включая, этого конечного значения:
for index in stride(from: 0, to: strings.count, by: 1) {
print(index, strings[index])
}
Это остановится на третьей записи, и все будет хорошо:
0 foo
1 bar
2 baz
С учетом всего вышесказанного мы вообще не будем использовать stride
со значением by
, равным 1. Мы просто будем использовать наполовину. оператор открытого диапазона , ..<
:
for index in 0 ..< strings.count {
print(strings[index])
}
Или, поскольку этот индекс вам на самом деле не нужен, вы просто сделаете:
for string in strings {
print(string)
}
Или, в вашем case:
for post in posts {
let url = URL(string: "https://api.tdameritrade.com/v1/marketdata/\(post.symbol)/quotes")!
...
}