Как перегрузить оператор присваивания в быстром
Я хотел бы переопределить оператор '=' для 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 '_'
Ответы
Ответ 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-стиля без переполнения. Подробнее