Подтвердить что ты не робот

Как перегрузить оператор присваивания в быстром

Я хотел бы переопределить оператор '=' для CGFloat, как в следующей попытке:

func = (inout left: CGFloat, right: Float) {
    left=CGFloat(right)
}

Итак, я мог бы сделать следующее:

var A:CGFloat=1
var B:Float=2
A=B

Можно ли это сделать? Я получаю сообщение об ошибке Explicitly discard the result of the closure by assigning to '_'

4b9b3361

Ответ 1

Это невозможно - как указано в documentation:

Невозможно перегрузить оператор присваивания по умолчанию (=). Только сложные операторы присваивания могут быть перегружены. Аналогично, тернарный условный оператор (a? B: c) не может быть перегружен.

Если это вас не убедит, просто смените оператор на +=:

func += (inout left: CGFloat, right: Float) {
    left = CGFloat(right)
}

и вы заметите, что больше не получите ошибку компиляции.

Причиной ошибочного сообщения об ошибке является, вероятно, потому, что компилятор интерпретирует вашу попытку перегрузки как назначение

Ответ 2

Вы не можете переопределить назначение, но в своем случае вы можете использовать разные операторы. Например, оператор &=.

func &= (inout left: CGFloat, right: Float) {
    left = CGFloat(right)
}

Итак, вы можете сделать следующее:

var A: CGFLoat = 1
var B: Float = 2
A &= B

Кстати, операторы &+, &-, &* существуют в swift. Они представляют собой операцию C-стиля без переполнения. Подробнее