2014-06-28 4 views

Antwort

25

Es scheint, dass Sie explizit einen Zeichentyp eingeben müssen, damit es funktioniert. Das funktioniert für mich.

let char = Character("a") 
let string = String(count: 5, repeatedValue: char) 

Es kann jedoch sein, dass ein Fehler mit all dem vermischt ist. Ich glaube, die Art und Weise, wie Sie das getan haben, sollte für sich alleine funktionieren. Und ich kann nicht scheinen, Codevervollständigung auf diesem Initialisierer überhaupt zu bekommen.

Edit: Ich gehe mit Fehler. Die folgenden Kompilierungen sind in Ordnung.

let array = Array(count: 5, repeatedValue: "a") 
+1

Das funktioniert! Es ist seltsam, dass Swift Reference Guide einen so großen Fehler gemacht hat. –

+0

Scheint, dass repeatedValue ein Zeichentyp sein muss, aber es gibt keine offensichtliche Möglichkeit, ein Zeichenliteral in Swift zu erstellen (in C würden Sie einfache Anführungszeichen anstelle von Anführungszeichen verwenden.) –

+2

Die Anleitung ist nicht gebrochen, die Inferenz-Engine ist. Subskribierung ist ein Paradebeispiel dafür, dass es trotz der wirklich expliziten Typen flach auf sein Gesicht fällt. – CodaFi

6

Dies funktioniert gut:

var str9 = String(count: 5,repeatedValue: Character("c")) 
+3

Ja, aber es ist im Grunde die gleiche Antwort wie oben. –

0

Ich weiß, dass dies eine alte Frage und hat bereits eine Antwort. Aber ich denke, ich weiß , warumString(count: 5, repeatedValue: "a") nicht funktioniert.

Die Sache String ist, hat zwei initialisers ähnlich aussehende:

init(count: Int, repeatedValue: Character) 
init(count: Int, repeatedValue: UnicodeScalar) 

Also in diesem Fall Compiler kann nicht sagen, ob eine wörtliche ein Character oder UnicodeScalar ist, also Zeitfehler kompilieren, wenn Sie nicht explizit tun passieren Character. Um zu bestätigen, dass "a" als UnicodeScalar interpretiert werden können Sie überprüfen, ob diese Zeile kompiliert:

let a: UnicodeScalar = "a" 
7

Zum Wohle zukünftiger Forscher: ab Swift 3, verwenden init(repeating:count:).

+0

Glücklicherweise akzeptiert dieser aktualisierte Initialisierer auch Strings anstelle von Zeichen. – mklbtz

0

Swift 3:

var array = Array(repeating: 0, count: 5) 

Ausgang: [0, 0, 0, 0, 0]

1

Für jedermann in schnellen 3.x seine nun in etwa so wird dies wie eine Arbeit Charme.

var string = String(repeating: "a", count: 5)