Swift 3.1中字符下标如何使用?
How to use Character subscript in 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
下标在这里从未匹配过?
""
可以是 String
文字和 Character
文字,
并且默认为 String
(如果两者在上下文中都有效)。有
test["" as Character] // Character:
或
let c: Character = ""
test[c] // Character:
你得到了预期的结果。
我是 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
下标在这里从未匹配过?
""
可以是 String
文字和 Character
文字,
并且默认为 String
(如果两者在上下文中都有效)。有
test["" as Character] // Character:
或
let c: Character = ""
test[c] // Character:
你得到了预期的结果。