2014-06-28 18 views

risposta

25

Sembra che sia necessario passare in modo esplicito un tipo di carattere. Questo funziona per me.

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

Anche se è possibile che ci sia un errore in tutto questo. Credo che il modo in cui lo stavi facendo avrebbe dovuto funzionare da solo. E non riesco a ottenere il completamento del codice su questo inizializzatore.

Modifica: Io vado con bug. Il seguente compila bene.

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

Questo funziona! È strano che Swift Reference Guide abbia commesso un errore così grande. –

+0

Sembra che ripetutoValore deve essere un tipo di carattere, ma non esiste un modo ovvio per rendere un carattere letterale in Swift (in C, useresti le virgolette singole piuttosto che le virgolette doppie). –

+2

La guida non è rotta, il motore di inferenza del tipo è. L'abbonamento è un primo esempio in cui cade a vuoto sul suo volto pur avendo tipi veramente espliciti. – CodaFi

6

Questo funziona bene:

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

Sì, ma è fondamentalmente la stessa risposta di cui sopra. –

0

So che questa è una vecchia questione e ha già una risposta. Tuttavia penso di sapere perchéString(count: 5, repeatedValue: "a") non funziona.

La cosa è String ha due simili cercando initialisers:

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

Quindi in questo caso il compilatore non può dire se un letterale è un Character o UnicodeScalar, quindi compilazione errore di tempo se non si passa esplicita Character. Per confermare che "a" può essere interpretato come UnicodeScalar è possibile verificare che questa linea compila:

let a: UnicodeScalar = "a" 
7

A beneficio dei ricercatori futuri: come di Swift 3, utilizzare init(repeating:count:).

+0

Fortunatamente, questo inizializzatore aggiornato accetta anche le stringhe anziché i caratteri. – mklbtz

0

Swift 3:

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

uscita: [0, 0, 0, 0, 0]

1

Per chiunque in rapida 3.x sua ora qualcosa di simile questo funzionerà come un fascino.

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