Как использовать символьный индекс в Swift 3.1?
Я новичок в Swift. Я обнаружил странное поведение сопоставления нижних индексов:
struct SubscriptTest {
subscript(character: Character) -> String {
return "Character: \(character)"
}
subscript(string: String) -> String {
return "String: \(string)"
}
subscript(int: Int) -> String {
return "Int: \(int)"
}
}
let test = SubscriptTest()
test["abc"] // String: abc
test[13] // Int: 13
test[""] // String: (surprisingly)
Я думал, что последний тест будет соответствовать моим Character
нижний индекс, а не String
один. Я попытался поменять местами объявления подписчиков, думая, что, возможно, используется последний соответствующий. Это ничего не изменило, String
индекс все еще используется для одного Character
,
Я знаю, я мог бы просто использовать String
подписаться и проверить количество символов, но корень моего вопроса в любопытстве.
Почему Character
нижний индекс здесь никогда не совпадал?
1 ответ
Решение
""
может быть как String
буквальный и Character
буквально, и по умолчанию String
(если оба действительны в контексте). С
test["" as Character] // Character:
или же
let c: Character = ""
test[c] // Character:
Вы получите ожидаемый результат.