/ / Kann ich NSLog mit Swift-Strukturen verwenden? - schnell, struct, nslog

Kann ich NSLog mit Swift-Strukturen verwenden? - schnell, struct, nslog

Ich würde gerne benutzen können NSLog mit Swift-Strukturen. Kann ich? Was ich gerade mache ist:

extension CGRect {
var description:String {
return "(self.left),(self.top)_|(self.width),(self.height)"
}
}

NSLog("rect for something %@", self.someView.frame.description)

ich hatte gehofft das einfach hinzufügen description var zu CGRect wäre genug und ich würde nicht explizit hinzufügen müssen .description in dem NSLog() Anruf. Aber wenn ich es versuche, komme ich

Argument type "CGRect" does not conform to expected type "CVarArgType"

Es scheint, dass Arrays von Strukturen ähnliche Probleme haben (weil Arrays auch Strukturen sind?)

Antworten:

8 für die Antwort № 1

Soweit NSLog betroffen ist, ist CGRect nicht eine schnelle Struktur. Es ist eine C-Struktur. Und es gibt bereits eine C-Funktion, mit der Sie einen loggen können: NSStringFromCGRect. Genau das ist diese Funktion zum:

NSLog("rect for something %@", NSStringFromCGRect(self.someView.frame))

Auf der anderen Seite gibt Swift CGRect bereits eine eigene String-Repräsentation, und Sie können es einfach erhalten, indem Sie in String umwandeln:

NSLog("rect for something %@", String(self.someView.frame))

Aber Sie können ein CGRect nicht direkt in verwenden irgendein Art von NSLog Anruf. Es ist nicht etwas, das über einen entsprechenden Formatbezeichner verfügt. Wenn Sie einen CGRect mit NSLog verwenden möchten, müssen Sie Muss pass es durch etwas Rufen Sie an, das etwas liefert, mit dem NSLog umgehen kann. Die Tatsache, dass Sie diesen Code in Swift schreiben, ist irrelevant; Um NSLog zu verwenden, müssen Sie es genau so verwenden, als wäre dies Objective-C / C, weil NSLog ist Ziel-C / C.

Es ist nicht ganz klar, warum Sie überhaupt NSLog verwenden, da es nicht so klingt, als hätten Sie eine Ahnung, was Sie tun. Und ausserdem, print werde das für dich tun und es ruft automatisch Ihren an description Wenn Sie sich an Printable anpassen (jetzt CustomStringConvertible genannt, weil es Apple egal ist, wie lange und hässlich die Namen der Dinge sind).


0 für die Antwort № 2

Sie können "extension" für C struct in swift verwenden und Sie können dies in Xcode6 (Swift1.2) schreiben.

extension CGRect: Printable {
public var description:String {
return "(self.minX),(self.minY)_|(self.width),(self.height)"
}
}

NSLog("rect for something %@", self.view.frame.description)

Ergebnis:

2015-09-15 14:00:04.072 aaa[7330:158325] rect for something 0.0,0.0_|375.0,667.0