Подписка в Swift осуществляется за кулисами, вызывая специальный метод subscript
, который принимает Int
.Поэтому, когда вы пишете:
locations[0]
Swift действительно вызывает функцию subscript
со значением внутри []
:
locations.subscript(0)
Вы не можете вызвать subscript
напрямую, но он есть, и вы можете определить пользовательскую подписку для своих классов, реализовав для них subscript
.
Вы путаете Swift с дополнительными фигурными скобками { }
, которые следуют за locations[0]
.Swift интерпретирует { }
и их содержимое как замыкание с подписью () -> ()
(не вводит, не выводит).Из-за синтаксиса завершающего замыкания Swift затем интерпретирует это замыкание как второй аргумент функции subscript
, которая вызывается для locations
для выполнения индексации.Эта функция подписки принимает один аргумент, Int
, но вы передаете два аргумента, Int
и закрытие () -> ()
.Это то, что сообщение об ошибке говорит вам.
Исправление заключается в удалении лишних { }
:
let location = SNStore.Welland[index].locations[0]
if location.timestamp > 0 {
// do something
}