Kuidas panna operaator toetama 't' tüüpi funktsiooni?
sobes.tech AI
Vastus AI-lt
Swift ja Xcode'is puudub 't' tüüpi operaator. Tõenäoliselt räägitakse teisest operaatorist või kontseptsioonist:
Kui soovite olemasolevate operaatorite võimalusi laiendada kasutaja tüüpidele, tehakse seda operaatorite ülekoormamise teel.
Operaatorite ülekoormamine võimaldab määratleda oma teostuse konkreetsele andmetüübile:
// Näide + operaatori ülekoormamisest kasutaja struktuuri jaoks
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)
}
}
// Ülekoormatava operaatori kasutamine
let vector1 = Vector2D(x: 2.0, y: 3.0)
let vector2 = Vector2D(x: 1.0, y: 4.0)
let sumVector = vector1 + vector2 // Kasutab ülekoormatavat + operaatorit
Peamised sammud operaatorite ülekoormamiseks:
- Määrake, millist operaatorit soovite üle koormata (nt
+,-,*,/,==,<). - Määrake funktsioon koos
staticmärksõnaga ja operaatorisümboliga funktsiooni nime sees. Näiteks liitmise puhul on seestatic func +. - Näidake operando tüübid funktsiooni parameetrites ja tagastatava väärtuse tüüp, mis vastab operatsioonile.
Võite üle koormata ühepoolsed, kahepoolsed ja kolmpoolsed operaatorid. Samuti saab luua kasutaja määratletud operaatorid, kuid see on vähem levinud praktika:
| Operaatori tüüp | Näide | Kasutamine |
|---|---|---|
| Ühepoolsed | -a |
static prefix func - (a: Vector2D) -> Vector2D |
| Kahepoolsed | a + b |
static func + (left: Vector2D, right: Vector2D) -> Vector2D |
| Kolmpoolsed | a ? b: c |
Ei saa üle koormata sisseehitatud ternary operatsiooni :?. |
Operaatorite ülekoormamisel on oluline järgida operaatori üldist semantikat, et kood jääks arusaadavaks. Ülekoormamise või mittestandardse semantika kasutamine võib põhjustada keerukusi koodi mõistmisel ja hooldamisel.