标题几乎解释了这个问题,我想做这样的事情:MyStruct[123]
而不需要调用函数(MyStruct.doSomething(123)
)或创建实例(MyStruct()[123]
) 。将它放在类或结构上就可以了。
答案 0 :(得分:8)
简短的回答是否定的。静态仅限于结构或类中的方法和属性。下标是运算符,不能设置为静态。这是可行的:
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的对象(在这种情况下)。此外,值得一看:
答案 1 :(得分:2)
由于Swift 5.1可以使用静态和类下标(Proposal SE-0254)。它们称为 type subscripts 。
所以现在可以这样做:
let finalMessages = [];
let prevTimestamp = null;
messages.forEach((message, index) => {
if (moment(message.timestamp).isSame(moment(prevTimestamp), 'days')) {
message.timestamp = null
} else {
prevTimestamp = message.timestamp
}
finalMessages.push(message)
})