Ich beginne gerade mit der Arbeit an einem Projekt, und meine erste Aufgabe ist das Zerlegen eines God Objects, das jemand anderes aus dem AppDelegate erstellt hat. Ich habe damit begonnen, Code zu kopieren, der sich auf die Verwaltung des Standortes bezieht, um Aufrufe an diesen Code in das neue Objekt zu delegieren.Warum würde identischer Code an einer Stelle einen Fehler ausgeben, aber nicht an einer anderen Stelle?
Ich habe zwei Aussagen, die mich aber verrückt machen.
Neue Datei:
if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}
Alt-Datei:
if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}
Sie sind der Code bemerken identisch ist. In beiden Fällen self.locationManager? wie folgt definiert ist:
var locationManager: CLLocationManager?
Aber in der neuen Datei, erhalte ich eine Warnung über ‚Wert des optionalen Typs keine ungeöffneten‘ - warum? Exakter doppelter Code, kopiert & eingefügt, was würde das anders machen?
den Code ändern es auszupacken behebt Dinge:
if (locationManager?.location?.horizontalAccuracy)! > horizontalAccuracyCheck{...}
ich um meinen Kopf wickeln kann, warum ich brauche, um explizit eine potenziell optional Rück auspacken. Aber ... warum nur an einem Ort?
Meine Vermutung ist, dass der Migrator [http://stackoverflow.com/q/39251005/2976878] für optionale Vergleich in der alten Datei eingefügt, aber es ist nicht ein in der neuen Datei (Ich glaube nicht * Sie können Swift 2 und Swift 3 zusammen auf dem gleichen Ziel mischen). – Hamish
@Hamish sollten Sie das als Antwort geben. Wenn es richtig ist, ist es eine brillante Schätzung und verdient es offensichtlich, die akzeptierte Antwort zu sein. – matt
D'oh. @ Hamish ist fast sicher korrekt - die Überladung ist in der älteren Datei vorhanden. Es ist auf meiner To-Do-Liste, um es irgendwann zu entfernen. – RonLugge