Свифт: нумерация начинается с 1? - PullRequest
0 голосов
/ 14 апреля 2020

В Swift возможно ли перечислить последовательность, начинающуюся с 1?

В моем случае я использую SQLite C интерфейс к привязать значения к подготовленные заявления . Второй аргумент подпрограмм sqlite3_bind_*() - это индекс параметра SQL, который нужно установить. Индексы начинаются с 1. (Ie, они основаны на одном.)

Я мог бы использовать Sequence.enumerated() и просто добавить 1 к n внутри каждой итерации, как итак:

for (n, value) in values.enumerated() {
  sqlite3_bind_int(stmt, Int32(n)+1, value)
}

Но есть ли способ начать n с 1?

1 Ответ

1 голос
/ 14 апреля 2020

Нет, все индексы коллекций в Swift основаны на нулях, но если вы действительно хотите, вы можете создать свое собственное пользовательское перечисление, архивирующее диапазон значений Int32 и исходную коллекцию:

extension Collection {
    var enumerated: Zip2Sequence<PartialRangeFrom<Int32>, Self> { zip(1..., self) }
}

использование:

let values: [Int32] = [10, 20, 30]

for (n, value) in values.enumerated {
    print("value:", value, "at:",  n)
}

Будет напечатано

value: 10 at: 1

value: 20 at: 2

value: 30 at: 3
...