我可以在Swift中使用静态下标吗?

时间:2016-02-24 17:37:29

标签: ios swift

标题几乎解释了这个问题,我想做这样的事情:MyStruct[123]而不需要调用函数(MyStruct.doSomething(123))或创建实例(MyStruct()[123]) 。将它放在类或结构上就可以了。

2 个答案:

答案 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的对象(在这种情况下)。此外,值得一看:

http://www.codingexplorer.com/custom-subscripts-swift/

答案 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)
})