2015-04-30 17 views
17

chciałbym zastąpić operatora „=” na CGFloat jak spróbować obserwacji:jak przeciążyć operator przypisania w Swift

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

Więc mogę wykonać następujące czynności:

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

Czy można to zrobić? I pojawia się błąd Explicitly discard the result of the closure by assigning to '_'

+3

Nie można przeciążać operatora przypisania - tylko złożone przypisanie (jak np. '+ =' Itp.) – Antonio

+1

@Antonio ma rację, oto jego odniesienie: https://developer.apple.com/library/ios/ documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html –

Odpowiedz

24

To nie jest możliwe - jak wskazano w documentation:

To nie jest możliwe przeciążenie operatora domyślne przypisania (=). Tylko operator przypisania przypisania może być przeciążony. Podobnie, trójskładnikowy operator warunkowy (a? B: c) nie może być przeciążony.

Jeśli to nie przekona cię, wystarczy zmienić operatora +=:

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

i zauważysz, że nie będzie już pojawia się błąd kompilacji.

Przyczyną mylących komunikatu o błędzie jest prawdopodobnie dlatego, że kompilator interpretuje swoją próbę przeciążenia jako przypisanie

+1

Dzięki Antonio. –

9

Nie można zastąpić zadanie, ale można używać różnych operatorów w danym przypadku. Na przykład operator &=.

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

Więc można wykonać następujące czynności:

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

przy okazji operatorów &+, &-, &* istnieć w systemie SWIFT. Reprezentują operacje w stylu C bez przepełnienia. More

+1

Ludzie, którzy uderzyli '-', powiedzcie mi, co mam tutaj źle. Używam tego kodu w moich projektach 'swift' i działa dobrze. – fnc12

+4

ludzie są głupi, nie martw się o to. Świetna odpowiedź. – Fattie

Powiązane problemy