ObjC Swift, Dictionary und Keys

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

  • ObjC Swift, Dictionary und Keys

    Ich ham mir ein Framework in Swift gemacht. Das funktioniert sogar.
    Das Framework wird auch aus ObjC genutzt und sogar das funktioniert.
    Einige Methoden geben ein Dictionary zurück. Nun möchte ich dem Programmierer konstanten für die Keys zur verfügung stellen. Möchte ja nicht dass der Stunden sucht weil er PackagÌngUnit statt PackagingUnit geschrieben hat.
    In ObjC schreibe ich in eine .m Datei

    Quellcode

    1. NSString * const kDictionaryKey = @"DictionaryKey";

    und in eine .h Datei

    Quellcode

    1. extern NSString * const kDictionaryKey;
    Wie macht man das nun in Swift?
    Bei einer Internetsuche bin ich auf seltsamste Konstrukte gestossen die alle irgendwelche Macken hatten.
    Bin schon geneigt statt Dictionary einfach Klassen zurück zu geben.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Da gibt natürlich mehrere Möglichkeiten. Mir gefällt der Weg über einen Typalias und Extensions am besten, wie es beispielsweise bei den Namen für Notifications gemacht wird:

    Quellcode

    1. class MyClass {
    2. public typealias Name = String
    3. public func myMethod(name: Name) { ... }
    4. }
    5. extension MyClass.Name {
    6. public static let myName = MyClass.Name("myName")
    7. }

    An jeder Stelle, wo jetzt ein Wert vom Typ MyClass.Name erwartet wird, brauchst du nur den Konstantennamen mit einem Punkt davor zu schreiben:

    Quellcode

    1. let myObject = MyClass()
    2. myObject.myMethod(name: .myName)
    Da du weitere Extensions für MyClass.Name anlegen kannst, kannst du auch nachträglich noch neue Konstanten hinzufügen. So kann man beispielsweise auch immer wieder weitere Notification-Arten implementieren.
    „Meine Komplikation hatte eine Komplikation.“
  • Da habe ich mich nicht korrekt ausgedrückt.
    Ich möchte im Swift-Framework irgendwie Strings definieren die ich ohne große Klimmzüge in ObjC verwenden kannn.

    Ich hab jetzt Klassen statt Dictionarys.
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.