Swift-Array - use "Enthält" der Typ AnyObject
Möchte ich die Funktion contains
auf Array vom Typ AnyObject
import UIKit
var resultArray: Array<AnyObject> = Array()
resultArray.append(50)
resultArray.append(false)
resultArray.append("Test string")
let found = contains(resultArray, 50)
Bekomme ich die Fehlermeldung:
Type 'AnyObject -> L' does not conform to protocol 'IntegerLiteralConvertible'
- Don ' T mix-Typen in einem array, es ist nicht eine gute Praxis. In diesem Fall stellen Sie 50 ein string, so dass alle Elemente eines String-Typs.
- Was ist dann der Zweck der
AnyObject
? - Wie Zaph schon sagte, mit AnyObject ist nicht ideal, es sei denn, Sie wirklich brauchen, um. Ein Beispiel für einen Zweck, für AnyObject ist beim schreiben oder über eine API, Holen Sie einige Informationen, die den Daten-Typ " unbestimmt von Ihnen, dem Programmierer. zB. Analysieren framework verwendet AnyObject, da Sie nicht wissen, ob, den Sie speichern einen String, Bool, Int, etc. Sie müssen dann konvertieren Sie es so bald wie möglich.
- Ja, ich Schreibe eine API. Und dieses Array ist Klasse variable, verwendet in einem Protokoll delegate-Methode. Klasse, die das delegate-Methode zurückgeben kann jede Art von Objekt in Vollendung blockieren. Dieses Array von Objekten, die möglicherweise von einigen String-Typen oder kann einige Modal-class-Objekte. e.g "Benutzer" - Objekte auf allen index wäre dasselbe ich.e; Strings oder User. So schließlich die Arrays konvertiert werden bestimmt noch einiges geben. Aber ich weiß nicht im Voraus, welche Art von Objekten Sie wäre. Wie kann ich es nutzen, bis der Typ unbestimmt ist?
- haben Sie einen Blick auf meine Antwort und sehen, ob das hilft. Vielleicht nicht der effizienteste Weg sein, aber es sollte sich eine Lösung für Ihr Problem 🙂
- Ihre Verwendung von Comic Sans vermerkt ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit den Kommentaren und anderen Antwort;
AnyObject
ist keine gute Praxis, aber wenn Sie wirklich verwenden möchtenAnyObject
, Sie können gönnen Sie Ihrem array von AnyObjects alsNSArray
Objekt und verwenden Sie dann die FunktioncontainsObject()
:NS
:). Wenn ich nicht finden konnte, alle (glaube ich), ich ' ll markieren Sie als Antwort akzeptiert. Ich wirklich zu schätzen Ihre Lösung.Array
s zuNSArray
um die Funktionen zu nutzen, die nurNSArray
hat.AnyObject
, was bedeutet, dass Sie aufgeben, auf alle Swift-Wert-Typen und Konvertierung alles, um NSObjects (und dann die Umwandlung, die das gesamte array aus einem Array selbst zu einem NSArray). Wenn ich merke, Sie haben darauf hingewiesen AnyObject war eine schlechte Praxis den Anfang Ihrer Antwort... 🙂AnyObject
ist keine gute Praxis, was kann ich sonst noch verwenden? Ich weiß nicht im Voraus, welche Art von Objekten, die Arrays gefüllt werden.Sollten Sie wahrscheinlich
Any
in diesem Beispiel, da sind Sie im Besitz von nicht-Klassen-Typen – ansonsten werden Sie tun eine implizite Konvertierung zuNSThing
s.Aber hier ist eine nicht-ObjC-interop Weg, es zu tun:
Int
nur. Ich bin der überprüfung50
nur zum Beispiel. Ich brauche eine Anweisung, können die Typen, die Typen zur Laufzeit.Können Sie die
is
Schlüsselwort zur Unterscheidung zwischen Typen und verwenden Sie dann das Stück code von Airspeed-Geschwindigkeit oben, um die Suche... Hier ist ein Beispiel, das Sie ändern können, und fügen Sie zusätzliche Arten auf, wenn es sein muss:HINWEIS: Sie sagten, Ihr array enthält nur 1 Art in einer Zeit - das ist wichtig.
10
if-Anweisungen?