Protokoll?! Nützlich oder Schrott?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Protokoll?! Nützlich oder Schrott?

    Ich wollte mal kurz mit Protokollen anfangen. Damit kann man ja Erweiterungen festlegen, welche der Grundtyp aufweisen soll, um bspw delegates zu prozessieren.

    Also gegeben ist das extrem komplizierte Protokoll:

    Quellcode

    1. protocol Toggable {
    2. func toggle()
    3. }


    Wenn man das mit einer Klasse verwendet, funktioniert es wie es soll..

    Quellcode

    1. class c: Toggable {
    2. var foo: Bool = true
    3. func toggle() {
    4. foo = !foo
    5. }
    6. }

    Will man dies mit structs verwenden:

    Quellcode

    1. struct s: Toggable{
    2. var foo: Bool = true
    3. func toggle() { // das mag der Compiler gar nicht
    4. foo = !foo
    5. }
    6. }

    bekommt sich der Compiler nicht mehr ein und verweigert den Dienst.

    denn er möcht unbedingt statt ein func ein mutating func. Ein mutating func ist aber bei Klassen unbekannt.

    Gibt es eine Möglichkeit ein Protokoll für beide Typen zu nutzen? Ich habe keine gefunden.

    So ist, dies nichts Halbes und nichts Ganzes. So lange ich nur lesende Routinen habe, ist dies noch halbwegs erträglich, bei schreibenden heist dies doppelte Arbeit und ziemlich viel Schrott im Code.

    Kennt einer einen Ausweg?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wolf ()

  • Apple schrieb:

    NOTE

    If you mark a protocol instance method requirement as mutating, you don’t need to write the mutating keyword when writing an implementation of that method for a class. The mutating keyword is only used by structures and enumerations.

    Also in Playground wird da nicht rumgemeckert

    Quellcode

    1. // MyPlayground
    2. import Foundation
    3. protocol Toggable {
    4. mutating func toggle()
    5. }
    6. class c: Toggable {
    7. var foo: Bool = true
    8. func toggle() {
    9. foo = !foo
    10. }
    11. }
    12. struct s: Toggable{
    13. var foo: Bool = true
    14. mutating func toggle() { // das mag der Compiler gar nicht
    15. foo = !foo
    16. }
    17. }
    Alles anzeigen
  • Ich check das mal.

    Aber dann ist natürlich auch die Hilfe falsch, denn wenn man mutating vor die class function schreibt, wie es automatisch bei der Code Compleation passiert, dann meckert der Compiler ebenfalls. Er mag in einer Klasse das wort mutating gar nicht.

    Melde mich, wenn ich am XCode war.

    … so würd das wohl gehen, wenn der Compiler das mit der Klasse frisst. Muss das noch prüfen.