标题已经很清楚地解释了问题,我想做类似这样的事情:
MyStruct[123]
,而不需要调用一个函数(MyStruct.doSomething(123)
)或创建一个实例(MyStruct()[123]
)。将其放在类或结构中都可以。MyStruct[123]
,而不需要调用一个函数(MyStruct.doSomething(123)
)或创建一个实例(MyStruct()[123]
)。将其放在类或结构中都可以。自 Swift 5.1 开始,静态和类下标脚本成为可能 (提案 SE-0254)。它们被称为 类型下标脚本。
因此,现在可以这样做:
struct MyStruct {
static var values = ["a", "b", "c"]
static subscript(index: Int) -> String {
values[index]
}
}
print(MyStruct[2]) // prints c
简短的回答是不行。静态只限于结构体或类中的方法和属性。下标是运算符,不能设置为静态。但是可以这样做:
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// prints "six times three is 18"
但你确实需要创建一个threeTimesTable对象(在这种情况下)。此外,值得一看的是: