Middle+
Kaip padaryti, kad operatorius palaikytų 't' tipo funkciją?
sobes.tech AI
Atsakymas iš AI
Swift ir Xcode nėra operatoriaus 't' tipas. Tikėtina, kad kalbama apie kitą operatorių ar koncepciją:
Jei norite išplėsti esamų operatorių galimybes naudotojo tipams, tai daroma per operatorių perkrovimą.
Operatorių perkrovimas leidžia apibrėžti savo įgyvendinimą konkrečiam duomenų tipui:
// Pavyzdys, kaip perrašyti + operatorių naudotojo struktūrai
struct Vector2D {
var x = 0.0
var y = 0.0
}
extension Vector2D {
static func +(left: Vector2D, right: Vector2D) -> Vector2D {
return Vector2D(x: left.x + right.x, y: left.y + right.y)
}
}
// Naudojimas su perrašytu operatoriumi
let vector1 = Vector2D(x: 2.0, y: 3.0)
let vector2 = Vector2D(x: 1.0, y: 4.0)
let sumVector = vector1 + vector2 // Naudoja perrašytą + operatorių
Pagrindiniai žingsniai operatorių perkrovimui:
- Nustatykite, kurį operatorių norite perrašyti (pvz.,
+,-,*,/,==,<). - Apibrėžkite funkciją su
staticraktažodžiu ir operatoriaus simboliu funkcijos pavadinime. Pvz., papildymui tai busstatic func +. - Nurodykite operando tipų parametrus ir grąžinamosios reikšmės tipą, atitinkantį operaciją.
Galite perrašyti vienpusius, dvipusius ir trigubus operatorius. Taip pat galima kurti naudotojo operatorius, tačiau tai mažiau paplitusi praktika:
| Operatoriaus tipas | Pavyzdys | Naudojimas |
|---|---|---|
| Vienpusiškas | -a |
static prefix func - (a: Vector2D) -> Vector2D |
| Dvipusis | a + b |
static func + (left: Vector2D, right: Vector2D) -> Vector2D |
| Trijų pusių | a ? b: c |
Negalima perrašyti įmontuoto ternary operatoriaus :?. |
Perrašant operatorius svarbu laikytis operatoriaus bendros semantikos, kad kodas liktų suprantamas. Perviršinis perkrovimas ar nestandartinės semantikos naudojimas gali sukelti sudėtingumų kodo supratime ir palaikyme.