【问题标题】:Swift subscript with argument label带有参数标签的 Swift 下标
【发布时间】:2020-01-19 10:11:27
【问题描述】:

是否可以创建一个可以使用显式参数标签调用的下标?

struct MyType {
    subscript (label: Bool) -> String? {
        return nil
    }
}

let test = MyType()
let value1 = test[true] // ok
let value2 = test[label: true] // Extraneous argument label 'label:' in subscript

尝试使用标签会导致错误:

下标中的无关参数标签“标签:”

新的键路径功能看起来像是使用带有参数标签的下标,但这可能是公众无法使用的编译器魔法:

let value = someThing[keyPath: \.property]

【问题讨论】:

    标签: swift label subscript


    【解决方案1】:

    默认情况下不使用subscript 中的外部参数标签,因此与普通函数不同,如果您想拥有外部参数标签,则需要明确指定。

    struct MyType {
        subscript(label label: Bool) -> String? {
            return nil
        }
    }
    
    let test = MyType()
    let value = test[label: true]
    

    【讨论】:

    • 非常感谢。我在 Ray Wenderlich 的tutorial 中看到了这个声明,但由于某种原因它没有点击,这意味着它要写两次。我就像“但是subscript (label: Bool) -> String? 明确的!”
    • @jeremyabannister 很高兴我能帮上忙 :) 是的,这是一个相当令人困惑的实现细节,尤其是因为它与普通函数的作用相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多