如何在Swift 3.1中使用字符下标?
问题描述:
我是新来的斯威夫特。我发现了标匹配的一些怪异的行为:如何在Swift 3.1中使用字符下标?
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中是否有类型优先级? –
@RoboRobok:文字有一个默认类型。 '123'可以是'Int'或'Float'或'Double'或'UInt64'或...。如果没有其他内容可以从上下文中推断出来,它将被视为“Int”。 –
我爱Swift越来越多:) –