2015-09-18 9 views
11

Immer wenn ein String-Literal in der Deklaration eines lazy var erscheint, erhalte ich einen Kompilierungsfehler in Swift 2/XCode 7: Cannot convert value of type String to expected argument type '(_builtinStringLiteral: RawPointer, byteSize: Word, isASCII: Int1)' ...String-Literale in faulen vars in Swift 2/XCode 7 [Kann Wert vom Typ String nicht konvertieren ...]

(I in Swift hatte keine Probleme 1.2/XCode 6)

Die einfachste Linie, die diesen Fehler so etwas wie folgt aussieht produziert:

lazy var foo = "bar" 

Aber mehr einschlägig (annoyingly), es kommt auch mit initializers das nehmen String-Argumente :

lazy var viewsLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13)) 
lazy var durationIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE) 

Das ist natürlich meine eigene initializers, und ich bemerken Apple-SDKs scheint nicht sehr oft Strings als args in initializers zu haben. Sind Strings in init s schlechte Praxis?

Was wickelt Arbeit die Deklaration in einem Block ein.

Ich könnte das jetzt tun, oder sie einfach nicht machen lazy.

Ich bin immer noch neugierig. Ist das ein XCode 7 Bug?

UPDATE:

habe gerade bemerkt, dass das, was funktioniert ist nicht in einem Verschluss der Erklärung Einwickeln, sondern die Art des var spezifiziert, so dass es nicht zu entnehmen ist.

lazy var viewsLabel: HWLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13)) 
lazy var durationIconView: HWIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE) 

Warum das Aussehen eines String in einer lazy var Erklärung Verwirrungen mit Typinferenz über mich:

So was funktioniert. Immer noch eine Ahnung, es könnte ein XCode 7 Bug sein.

+0

Es scheint, dass eine explizite Typanmerkung hilft, z.B. 'Lazy var foo: String =" bar "'. –

+0

Ha, danke @MartinR! Habe gerade das auch bemerkt und meine Frage aktualisiert. –

+0

Sieht für mich wie ein Fehler aus. –

Antwort

Verwandte Themen