Schritt für Schritt Ansatz zur Migration von Apps von Objective-C nach Swift

Wir sind uns bewusst, dass es bei der Entwicklung von iOS-Apps zwei wichtige Programmiersprachen gibt. Objective-C und Swift.

Swift kam zwar viel später im Vergleich zu Objective-C (2014), übertraf aber sein Gegenstück, um der Favorit der iOS-Entwickler zu werden.

Dies liegt hauptsächlich an der Tatsache, dass es eine Vielzahl von Vorteilen bietet, z. B. weniger Codes schreiben, weniger Wartung von Apps, Beschleunigung des App-Entwicklungsprozesses, wenige Fehler und Abstürze, aus Sicherheitsgründen stark und vieles mehr.

Wenn Sie also an Objective-C gearbeitet haben, ist es an der Zeit, auf Swift umzusteigen.

Viele der beliebten iOS-Apps wie Yahoo, LinkedIn, Lyft, Weather usw. sind bereits erfolgreich von Objective-C zu Swift gewechselt, und jetzt sind Sie an der Reihe.

Lesen Sie auch: Swift Vs. Ziel C: Lassen Sie uns herausfinden, wer der Gewinner ist

Also, wie man mit der Konvertierung beginnt

Einer der wichtigen Punkte, die beachtet werden müssen, ist die Verwendung des neuesten Objective-C-Codes.

Mit Hilfe von a moderner Objective-C-KonverterMit Xcode können Sie die entsprechenden Enum-Makros implementieren und die ID nach Möglichkeit in instancetype ändern. Es ist auch hilfreich, die neueste @ property-Syntax zu aktualisieren.

Die Entwickler von iOS-Apps müssen hier einige Sorgfalt walten lassen, da der Konverter nicht die Semantik des Codes darstellt.

Aber es wird Ihnen helfen, die Mechanik möglicher Änderungen zu erkennen und anzuwenden. Daher ist es ratsam, alles manuell zu überprüfen und dann die Änderungen vorzunehmen.

Wenn Sie den modernen Objective-C-Konverter verwenden, führen Sie die folgenden Schritte aus:

Bearbeiten → Konvertieren → In moderne Objective-C-Syntax.

Konvertieren Sie jeweils eine Klasse

Sie müssen sich daran erinnern, dass Sie nicht alle Codes gleichzeitig von Objective-C in Swift konvertieren können, sondern jeweils eine Klasse auswählen müssen.

Einige Klassen sind in Swift geschrieben, andere in Objective-C, und Sie erhalten ein Hybridziel, sobald die Swift-Datei zum Objective-C-App-Ziel hinzugefügt wird.

Swift kann keine Unterklassen haben, daher können Sie sich für zwei Dateien entscheiden, nämlich eine Header-Datei, die .h ist und den Abschnitt @interface enthält, und eine .m-Datei, die den Abschnitt @implementation enthält.

Sie müssen keine Header-Datei entwickeln, da die .m-Datei die .h-Datei importiert, wenn sie auf eine Klasse verweisen möchte.

Entwickeln eines Bridging-Headers

Xcode bietet die Möglichkeit, einen Überbrückungskopf zu entwickeln, sobald Sie dem Swift-Ziel eine Objective-C-Datei hinzugefügt haben oder umgekehrt. Sie würden wahrscheinlich auf eine Nachricht als stoßen

Überbrückungskopf

Tatsächlich hat die .h-Datei ihren Standardnamen vom Ziel und kann geändert werden. Um die Änderung vorzunehmen, müssen Sie jedoch auch den Objective-C-Bridging-Header des Ziels ändern.

Wenn Sie die Objective-C .h-Datei in den Bridging-Header importieren, wird sie für Swift sichtbar.

Durchführen der Nullprüfungen

In der Programmiersprache Objective-C erhalten Sie bei jedem Senden einer Nachricht an ein Nullobjekt letztendlich einen Wert von Null.

Wenn Sie also verhindern möchten, dass dies stattfindet, oder einen Nullwert erhalten, müssen Sie sich unbedingt für die Nullprüfungen gemäß den Anforderungen entscheiden. Normalerweise erhalten Sie es als generische Aufzählung.

public enum Optional : _Reflectable, NilLiteralConvertible

In einem normalen Fall erhalten Sie eine von zwei; Ein Wert vom Typ Wrapped oder ein Wert, der nicht vorhanden ist.

Wrapped Value erhalten

Mit Swift erhalten Sie auch den syntaktischen Zucker für die Angabe der Typen optional. Sie können den optionalen durch String? Ersetzen.

Sie können den umhüllten Wert mit zwei Methoden aus dem Wahlcontainer erhalten, einschließlich optionaler Verkettung und erzwungener Umhüllung.

Im ersten Fall wird es verwendet, wenn die bedingte Anweisung im Falle ihrer Existenz einen Wert erhält.

Im zweiten Fall ist die bedingte Anweisung nicht Null. Wenn es eine Variable enthält, erhalten Sie ein Ergebnis, ohne Bedingungen anzuwenden, oder es stürzt ab.

Die in Swift vollständig ausgepackte Option wird als String bezeichnet. Dies kann anhand eines aussagekräftigen Beispiels veranschaulicht werden:

class ExampleClass {
   var nonOptionalString: String
   var unwrappedOptionalString: String!
   var optionalString: String?

   init(string: String) {
       nonOptionalString = string
   }
}

Nun, Sie können auf drei Möglichkeiten stoßen, die zu diesem Zeitpunkt kommen können.

  1. Der erste ist der von nonoptinalString, dessen Wert niemals Null sein wird. Es sollte eine Variable enthalten, wenn das Objekt initialisiert wird, da es sonst abstürzt.
  2. Der zweite ist unwrappedOptionalString, wobei der Wert von string null ist. Wenn Sie also versuchen, auf ein Objekt mit nichts Wert zu stoßen, stürzt das Programm ab.
  3. Der dritte ist optionalString, wobei der String null bleibt, aber als reguläre optionale Variable verwendet wird.

Wenn Sie also die Objective-C-Codes schreiben, sollten Sie Ihre Variablen besser in zwei verschiedene Kategorien einteilen. Anmerkungen vom Typ Nullable und _Nonnull.

Daher würde die zuvor angegebene Abbildung ungefähr so ​​aussehen:

@interface ExampleClass: NSObject
@property (nonatomic, strong) NSString * _Nonnull nonOptionalString;
@property (nonatomic, strong) NSString *unwrappedOptionalString;
@property (nonatomic, strong) NSString * _Nullable optionalString;

- (instancetype)initWithString:(nonnull NSString *string);
@end

Tupel

Neben den Optionals hat Apple auch eine neue Entwicklungssprache vorgestellt, die besser als Tuples bekannt ist.

Es gruppiert verschiedene Werte zu einem zusammengesetzten Wert und ist ein gutes Werkzeug für den Fall, dass Sie ein Modell an einem Ort entwickeln, und ist direkt nicht benutzerfreundlich.

Erweiterungen

Die in der Objective-C-Sprache verfügbaren Erweiterungen werden in Swift zu einer einzigen Entität zusammengefasst.

Es bietet eine neue Funktionalität für die vorhandene Klasse, Struktur und das vorhandene Protokoll, und es ist nicht erforderlich, den Quellcode zum Erweitern von Typen zu verwenden.

Aufzählungen

Das Objective-C beschränkt die Code-Aufzählungen nur auf die primitiven Typen.

Wenn Sie den Wert für die Ganzzahlaufzählung den nachfolgenden Zeichenfolgen zuordnen möchten, um das Ergebnis dem Benutzer anzuzeigen oder an das Backend zu senden, ist ein Array oder ein Wörterbuch erforderlich.

Swift macht es Ihnen jedoch bequem, da Sie diese Komplikationen nicht durchmachen müssen. Es bietet neue Aufzählungen mit mehr Optionen.

enum ExampleEnum {
    case ExOne, ExTwo, ExThree
}

Es kann die zugehörigen Werte speichern und Sie können Rohwerte in der Swift-Enumeration speichern, indem Sie sie ähnlich wie bei Objective-C verwenden.

enum AnotherExampleEnum {
   case ExOne(String, Int)
   case ExTwo(Int)
}

Indizes

Indizes werden grundsätzlich verwendet, um Informationen aus einer Gruppe oder einem Sortiment von Klassenstrukturen oder Aufzählungen ohne zu erhalten

mit jeder Technik. Indizes helfen dabei, die Werte nach Index wiederzugewinnen, und als solche müssen Sie sie nicht speichern oder abrufen.

Die Elemente in der Array-Instanz können als someArray (Index) und für die Directory-Instanz als someDictionary angezeigt werden [key].

Folgen Sie einfach der Syntax:

subscript (index: Int) -> Int {
get {
//for declaring subscript value
}
set (newValue) {
//for defining values
}
}

Typ Implikation

Wenn wir uns bei der iOS-Entwicklung auf die Typensicherheit konzentrieren, bezieht sich diese normalerweise auf eine Ganzzahl, die mit einem bestimmten Typ deklariert ist.

Es kann nicht geändert werden und bleibt fest. Der Compiler entscheidet, welcher Variablentyp gemäß dem angegebenen Wert fortgesetzt wird.

Beispielsweise:

var str = "One String"
// OR
var str2:String
Str2 = "Second String"

Wenn Sie versuchen, zunächst eine str2-Variable mit Zahlenwerten zu versehen, zeigt der Compiler einen Fehler an.

Str2 = 10 //error: Cannot put value of type 'Int' to type 'String'

Funktion

Swift bietet einen einfacheren Ansatz, wenn es um die Funktionssyntax geht. Jede Funktion besteht aus einem Typ und der Typ enthält die Parametertypen und den Rückgabetyp der Funktion.

Sie können der Variablen entweder eine Funktion zuweisen oder sie als Wert übergeben. Die App-Entwickler können den Parametern auch einen Standardwert zuweisen.

Lassen Sie es uns anhand eines Beispiels veranschaulichen:

func stringCharacterscount (s: String) -> Int
   {
return s.characters.count
   }
func stringToInt (s: String) -> Int
   {
if let a = Int (s)
   {
return a
   }
return 0
   }
func executeSuccessor (f: String -> Int, s: String) -> Int
   {
Return f(s). successor()
   }
let f1 = stringCharacterscount
let f2 = stringToInt

executeSuccessor (f1, s: "5555") //5
executeSuccessor (f2, s: "5555") //5556

Umgang mit Fehlern

Wenn Sie sich also mit den Fehlern in Objective-C befassen, müssen Sie den Verweis auf die Variable NSError verwenden.

Wenn dieser Ansatz jedoch nicht korrekt ist, müssen Sie eine NSError-Instanz entwickeln und in die übergebene Variable schreiben. Sie müssen den Fehlerparameter überprüfen und sicherstellen, dass er nicht Null ist.

- (nonnull NSString *)exampleMethod:(nonnull NSString *)param error:(NSError **)error {
   if (!param.length) {
       *error = [NSError errorWithDomain:[NSBundle mainBundle].bundleIdentifier
                                    code:-101
                                userInfo:nil];
       return nil;
   }
   // do work
}

Im Falle von Swift werden Fehler in Umlauf gebracht, geworfen, abgefangen und manipuliert, die behoben werden können.

Wichtige Punkte, die bei der Konvertierung berücksichtigt werden müssen

  1. In der ersten Instanz müssen Sie ein Paar von .h- und .m-Dateien auswählen, die in die Swift Development Language migriert werden müssen. Wenn Sie jedoch das gesamte Projekt konvertieren möchten, ist es besser, die AppDelegate-Klasse zu verlassen.
  2. Als nächstes müssen Sie den #import “MyViewController.h” aus dem gesamten Code finden und die Bridging-Header-Datei entfernen ([MyProject]-Bridging-Header.h).
  3. Sobald dies erledigt ist, ist es Zeit, Instanzen von #import “MyViewController.h” durch die Vorwärtsklassendeklaration zu ersetzen: @class MyViewController. Dies sollte für alle .h-Dateien durchgeführt werden, da dies dazu beiträgt, die Zirkelverweise zwischen Header-Dateien zu umgehen.
  4. Übersetzen Sie ein Paar Objective-C-Dateien in Swift. Sie können dies mithilfe der Finder-Erweiterung tun, die mit Swiftify for Xcode hinzugefügt wurde. Abgesehen davon muss der Inhalt von .h und .m in die Swift-Datei kopiert werden, und Sie können die Taste Datei konvertieren drücken.
  5. Die .h- und .m-Dateien müssen aus dem Projekt durch die konvertierte .swift-Datei ersetzt werden.
  6. Der nächste Schritt ist das Kompilieren des Projekts und das Beheben von Fehlern und Fehlern in einem beliebigen Projekt. Wenn Sie den Fehler beheben möchten, können Sie den Befehl Editor → Fix All in Scope unterstützen, der in den Xcode-Vorschlägen zur automatischen Korrektur verfügbar ist. Bei wiederholten Fehlern müssen Sie sich mit Swiftify in Verbindung setzen und das Problem dort melden.
  7. Einfach da! Sie müssen lediglich das Projekt erstellen und ausführen. Wenn Sie auf ein Problem stoßen, z. B. “Klasse nicht gefunden”, das anschließend abstürzt, müssen Sie im Storyboard-Editor nach Referenzen suchen. Geben Sie den Namen der Klasse im Identitätsinspektor erneut ein, speichern Sie ihn und versuchen Sie es erneut.
  8. Wir haben die AppDelegate-Klasse zum letzten Mal beibehalten. Wenn Sie das gesamte Projekt konvertieren, können Sie jetzt übersetzen. Alle Ihre Dateien wurden von Objective-C nach Swift migriert, sodass im Ziel nichts mehr vorhanden ist. Jetzt können Sie alle Dateien entfernen.

Fazit

Im Laufe der Zeit hat sich Swift zu Recht zu einer der wichtigsten Optionen für schnelle Entwickler entwickelt. Mit dieser neuen Programmiersprache von Apple, die gegenüber Objective-C mehrere Vorteile bietet, haben sich die meisten Entwickler bereits dafür entschieden, ihre Apps von Objective-C auf Swift umzustellen .

Die Konvertierung muss sehr sorgfältig durchgeführt werden, ohne einen Schritt zu verpassen. Es ist auch richtig, dass Sie einen erfahrenen Fachmann benötigen, um diesen Job zu erledigen. Sie können sich daher an unsere erfahrenen iOS-Entwickler wenden, um Ihnen zu helfen.

Similar Posts

Leave a Reply