2017-01-03 3 views
-2

Wie kann ich dies zu schnellen 3wie konvertiere ich dies für zu schnelle 3

let row = textField.tag 
if row >= arrayOfLinks.count { 
    for var addRow = arrayOfLinks.count; addRow <= row; addRow += 1 { 
     arrayOfLinks.append("") 
    } 
} 

Dank für Block konvertieren

+1

http://stackoverflow.com/questions/36173379/warning-c-style-for-statement-is-deprecated-and-will-be-removed-in-a-future-ve/36173489#36173489 –

Antwort

2

A C-style for-Schleife wird überhaupt nicht benötigt

let row = textField.tag 
while arrayOfLinks.count <= row { 
    arrayOfLinks.append("") 
} 
+0

Beachten Sie, dass die originale Lösung des OPs (absichtlich oder nicht ...) ein letztes Element anhängt, auch wenn 'arrayOfLinks.count' gleich' row' ist, dh äquivalent zur Verwendung von '<=' anstatt '<' in die obige "while" Schleifenbeendigungsbedingung. – dfri

+1

Danke, @dfri, ich habe die Antwort bearbeitet. – vadian

0

Versuchen Sie folgendes:

let row = textField.tag 
if row >= arrayOfLinks.count { 
    var addRow = arrayOfLinks.count 
    while addRow <= row { 
     arrayOfLinks.append("") 
     addRow += 1 
    } 
} 
+0

Es funktioniert, danke – Poseidon

0

Da Sie immer wieder eine PPEND die gleiche (Wert) Element, Sie brauchen nicht eine Schleife hier zu verwenden, sondern kann einfach eine Sammlung an das bestehende arrayOfLinks Array anhängen:

if arrayOfLinks.count <= row { 
    arrayOfLinks.append(contentsOf: 
     [String](repeating: "", count: row - arrayOfLinks.count + 1)) 
} 

Dies auch performanter sein sollte als wiederholt anhängt (gleicher Wert) Elemente Nicht, dass dies ein Problem sein sollte.

Beachten Sie auch, dass (gemäß Ihrer ursprünglichen Lösung) ein row Wert von z. 10 ergibt eine Summe (vorhanden + neu) von 11 Elementen im numberOfEntries Array.