Ich habe einige test code erstellt, um das Problem zu zeigen, das ich habe.Swift AnyObject Konvertierung
Dies kompiliert in einem Spielplatz, aber wenn ich versuche, es in ein Projekt zu setzen, Xcode gibt folgende Warnung: Treating a forced downcast to 'String' as optional will never produce 'nil'
auf line 30. Ich bin zwei Vorschläge gegeben, das Problem zu beheben:
Use 'as?' to perform a conditional downcast to 'String'
, die absolut keinen Sinn macht. Es kompiliert jedoch ohne Warnungen/Fehler, was merkwürdig erscheint, da es einem nicht optionalen TypString
einen optionalen Wert zuweist.Verwenden Sie die bedingte Form des Typs cast -Operator (als?), Wenn Sie nicht sicher sind, ob der Downcast erfolgreich sein wird. Diese Form des Operators gibt immer einen optionalen Wert zurück, und der Wert ist Null, wenn der Downcast nicht möglich war. Auf diese Weise können Sie nach einem erfolgreichen Downcast suchen.
Von der Swift language guide.
Wenn es nicht denkt, dass ich
nil
zuweisen möchte, wenn die Konvertierung fehlschlägt (daher den Wörterbucheintrag zu entfernen), macht dies keinen Sinn. Vor allem, weil ich sicher bin, dass es gelingen wird, weil ich buchstäblich nur überprüft habe, ob es einString
ist.Add parentheses around the cast to silence this warning
, was sinnlos scheint, aber tut Stille die Warnung. Das scheint eine seltsame Sache zu sein, aber andererseits kann es nur eine schlechte Art sein zu bestätigen, dass du wirklich tun willst, was du versuchst zu tun.
Welche Option ist richtig, oder keines von beiden? Was verursacht diese Warnung?
Es gibt viele Probleme mit diesem Code. Zuallererst müssen Sie die Rückgabetypen in Ihren Funktionen explizit umwandeln, damit sie ein 'AnyObject?' Zurückgeben. Zweitens sollten Sie das explizite Auspacken von "Optional" vermeiden, indem Sie '!' So oft wie möglich verwenden. – ColGraff
@ originaluser2 Guter Punkt, ich habe meinen Code aktualisiert. – Coder256
@ColGraff, der Punkt ist, dass die Funktionen Werte verschiedener Typen zurückgeben können (dies sind nur Beispiele). Warum sollte ich auch das explizite Auspacken von Optionals vermeiden (wenn ich bereits getestet habe, ob sie null waren)? – Coder256