У подписчиков есть другие правила, чем у функций, когда дело доходит до меток аргументов.Для функций в качестве меток аргументов по умолчанию используется имя параметра - например, если вы определите:
func foo(x: Int) {}
, вы бы назвали его foo(x: 0)
.
Однако для индексов параметры не имеютметки аргументов по умолчанию.Поэтому, если вы определите:
subscript(x: Int) -> X { ... }
, вы бы назвали его foo[0]
, а не foo[x: 0]
.
Поэтому в вашем примере с индексом:
subscript<T>(_ key: Key, as type: T.Type, defaultValue: T?) -> T? {
// the actual function is more complex than this :)
return nil
}
Параметр defaultValue:
не имеет метки аргумента, что означает, что подстрочный индекс должен называться self[key, as: type, nil]
.Чтобы добавить метку аргумента, вам нужно указать ее дважды:
subscript<T>(key: Key, as type: T.Type, defaultValue defaultValue: T?) -> T? {
// the actual function is more complex than this :)
return nil
}