AnyObject vs. Struct (Any)

8

Ich möchte eine Methode wie diese für meine Projekte erstellen:

%Vor%

Aber ich kann nicht, weil CGRect und CGSize struct s sind und nicht mit AnyObject protocol übereinstimmen. Also, irgendwelche Ideen, wie das gemacht werden könnte?

    
Paulo Cesar 01.04.2015, 13:18
quelle

4 Antworten

5

@ nkukushkins Antwort ist korrekt, wenn Sie jedoch eine Funktion haben wollen, die sich je nachdem, ob sie ein CGRect oder ein CGStruct übergeben hat, anders verhält, ist das Überladen besser:

%Vor%

Im Vergleich dazu wird Any ineffizient sein (das Konvertieren Ihrer Strukturen in Any und zurück, kann große Auswirkungen haben, wenn Sie dies in einer engen Schleife tun) und nicht typsicher (Sie können bestehen alles in diese Funktion, und es wird nur zur Laufzeit fehlschlagen.

Wenn Sie beide Typen in einen gemeinsamen Typ zwingen und dann dieselbe Operation ausführen möchten, können Sie eine dritte Überladung erstellen, die diesen Typ annimmt und von den anderen beiden aufrufen.

    
Airspeed Velocity 01.04.2015, 13:25
quelle
9

Verwenden Sie Any anstelle von AnyObject .

  

Swift bietet zwei spezielle Aliase für die Arbeit mit unspezifischen   Typen:

     

AnyObject kann eine Instanz einer beliebigen Klassenart darstellen.
  • Any kann eine Instanz eines beliebigen Typs darstellen, einschließlich der Funktionstypen.

Die Swift-Programmiersprache

    
Nikita Kukushkin 01.04.2015 13:19
quelle
2

Habe gerade eine viel bessere Methode entdeckt, dies zu tun. Swift hat eine Methode namens dump und es funktioniert mit vielen Arten von Daten.

Zum Beispiel:

%Vor%

Wird gedruckt:

%Vor%     
Paulo Cesar 03.04.2015 14:54
quelle
1

Wenn Sie nur ein CGRect oder CGSize drucken möchten, könnten Sie Folgendes verwenden:

%Vor%

oder

%Vor%

Sie haben am Ende Ihrer Funktion ein "..." hinterlassen, also nehme ich an, dass es mehr Typen gibt, die Sie drucken müssen. Dazu müssen Sie diese Typen dem Printable -Protokoll anpassen (sofern sie dies nicht bereits tun). Hier ist ein Beispiel dafür, wie -

%Vor%

Das können Sie verwenden:

%Vor%

Sie können auch das Format ändern, in dem ein Typ gerade gedruckt wird. Wenn Sie beispielsweise println(aRect) im selben Format wie von NSStringFromCGRect erhalten möchten, können Sie die Erweiterung verwenden:

%Vor%     
ABakerSmith 03.04.2015 16:47
quelle

Tags und Links