Как я могу определить постфиксный оператор для кортежа? - PullRequest
2 голосов
/ 22 марта 2019

У меня есть следующий код:

postfix operator ^^^
public postfix func ^^^(lhs: Int) -> Int {
    return 0
}

public postfix func ^^^<T>(lhs: (T, T)) -> [T] {
    return [lhs.0, lhs.1]
}

func go() {
    1^^^ // this works
    (0, 0)^^^ // error: Unary operator '^^^' cannot be applied to an operand of type '(Int, Int)'
}

, для которого я получаю ошибку, Unary operator '^^^' cannot be applied to an operand of type '(Int, Int)'.Есть идеи как это исправить?

1 Ответ

3 голосов
/ 22 марта 2019

Это известная ошибка, сравните Операторы префикса и постфикса, не работающие для типов кортежей на форуме Swift и SR-294 Странные ошибки для унарного префиксного оператора с кортежем arg .

Это было исправлено для Swift 5, следующие компиляции и запуска в Xcode 10.2 beta 4:

postfix operator ^^^

public postfix func ^^^<T>(lhs: (T, T)) -> [T] {
    return [lhs.0, lhs.1]
}

let x = (0, 0)^^^
print(x) // [0, 0]
...