2016-03-23 19 views
23

Ho appena scaricato un nuovo Xcode (7.3) con la versione 2.2.#warning: lo stile C per la dichiarazione è obsoleto e verrà rimosso in una versione futura di Swift

Ha un avvertimento:

C-stile per dichiarazione è deprecato e sarà rimosso in una versione futura di Swift.

Come posso risolvere questo avviso?

+1

non uso c-stile per i loop per risolvere ...: P sin dal suo fondamentalmente dicendo il codice * sarà * pausa nel futuro , quindi perché ritardare l'inevitabile. usa 'per i in 0 ... 10 {}' invece – Fonix

+0

Possibile duplicato di http://stackoverflow.com/questions/36213333/swift-3-c-style-for-statement-is-deprecated –

+1

Non proprio un duplicato di [Sostituzione per C-style loop in Swift 2.2] (http://stackoverflow.com/questions/36166907/replacement-for-c-style-loop-in-swift-2-2) - che è per casi speciali dove il nuovo stile non può replicare accuratamente la funzionalità. –

risposta

70

Rimozione for init; comparison; increment {} e anche rimuovere ++ e -- facilmente. e l'uso di Swift abbastanza per-in loop

// WARNING: C-style for statement is deprecated and will be removed in a future version of Swift 
    for var i = 1; i <= 10; i += 1 { 
     print("I'm number \(i)") 
    } 

Swift 2.2:

// new swift style works well 
    for i in 1...10 { 
     print("I'm number \(i)") 
    } 

Per indice di decremento

for index in 10.stride(to: 0, by: -1) { 
     print(index) 
    } 

Oppure si può utilizzare come reverse()

for index in (0 ..< 10).reverse() { ... } 

per tipo float (there is no need to define any types to index)

for index in 0.stride(to: 0.6, by: 0.1) { 
    print(index) //0.0 ,0.1, 0.2,0.3,0.4,0.5 
} 

Swift 3.0:

Da Swift3.0, Il metodo stride(to:by:) su Strideable è stato sostituito con una funzione libera, stride(from:to:by:)

for i in stride(from: 0, to: 10, by: 1){ 
    print(i) 
} 

Per indice di decremento in Swift 3.0, è possibile utilizzare reversed()

for i in (0 ..< 5).reversed() { 
    print(i) // 4,3,2,1,0 
} 

enter image description here


Altri poi for each e stride(), è possibile utilizzare While Loops

var i = 0 
while i < 10 { 
    i += 1 
    print(i) 
} 

Repeat-While Loop:

var a = 0 
repeat { 
    a += 1 
    print(a) 
} while a < 10 

check-out di controllo flussi The Swift Programming Language Guide

+0

Questo stile è possibile ma se si desidera eseguire il ciclo dall'array e se tale array ha valore zero, si verifica un arresto anomalo – sony

+2

@sony: vedere [questo Q & A] (http://stackoverflow.com/a/36167115/4573247) per alternative a il ciclo in stile C, che consente array di lunghezza zero (senza bisogno di ulteriori istruzioni if). – dfri

+0

sì capito ... ma ti dà la soluzione 'i in

1

ho ottenuto lo stesso errore con questo codice :

for (var i = 1; i != video.getAll().count; i++) { 
    print("show number \(i)") 
} 

Quando si tenta di risolvere il problema con Xcode si ottiene senza fortuna ... quindi è necessario utilizzare il nuovo stile veloce (per in loop):

for i in 1...video.getAll().count { 
    print("show number \(i)") 
} 
+0

come utilizzare per il decremento? – sony

0

Blockquote

Utilizzare questo invece

if(myarr.count) 
{ 
    for i in 1...myarr?.count { 
     print(" number is \(i)") 
    } 
} 
+0

Come utilizzare per il decremento? – sony

+1

Fare riferimento a http: // StackOverflow.it/questions/35032182/swift-c-style-loops-deprecated-decrement-index –

+1

@sony 'for i in myarr.count.stride (to: 0, di: -1) {...}' – dfri

2

Per questo ki nd "per" loop:

for var i = 10; i >= 0; --i { 
    print(i) 
} 

si può scrivere:

for i in (0...10).reverse() { 
    print(i) 
}