如何在Swift 3.1中使用Character下标?

时间:2017-07-07 09:44:47

标签: swift swift3 subscript

我是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 个答案:

答案 0 :(得分:1)

""可以是String字面值和Character字面值, 默认为String(如果两者在上下文中都有效)。与

test["" as Character] // Character: 

let c: Character = ""
test[c] // Character: 

你得到了预期的结果。