2016-04-04 17 views
0

Döngü, orada olmaması gereken bir öğeyi bulduğunda döngü sayacını azaltır ve kaldırır.Düzenlenebilir bir sayaç olmadan Swift 3 döngüsünü yazma

 var iMax = numListViews 
     for var i = 0; i < numListViews; i += 1 { 
      if (columnsSortTypesArray[i] == "") { 
       columnsSortTypesArray.removeAtIndex(i) 
       i-- 
       iMax-- 
      } else { 
       listViews[i].sortList(columnsSortTypesArray[i]) 
      } 
     } 
+3

'listViews' nedir? Ve 'columnsSortTypesArray', bu bir 'String' dizisidir? 'I': 'listView' için tele uygulanan '.sortList' yöntemi nedir? Lütfen [Minimal, Tam ve Doğrulanabilir bir örnek nasıl oluşturulur?] (Http://stackoverflow.com/help/mcve) adresine bakın ve muhtemelen sorularınızı daha alakalı (ancak şişirilmemiş) bilgilerle güncelleyin. – dfri

+4

Orijinal kodunuz zaten gizlenmiştir. 'Filter()' yöntemine bir göz atın! –

+1

Ayrıca, yukarıdaki kodla ilgili bir açıklama: ne? ColumnsSortTypesArray öğesinin "numListViews" öğesinden biraz daha büyük, ancak birkaç "" "girişi içerdiği bir uzunluk (sayı öğeleri) varsa ne olur? Bu, columnsSortTypesArray [i] '(girişimi) öğesi erişiminde,' columnsSortTypesArray 'öğesinden sonraki birkaç öğe kaldırma işleminden sonra artar' ('columnSortTypesArray' öğesinin uzunluğu ' dfri

cevap

-1

Böyle bir while döngü ile herhangi C tarzı dizi değiştirebilirsiniz: Bu Aradığınız buysa

var i = 0 
while i < numListViews { 
    // the rest of your code here 
    i += 1 
} 

Bilmiyorum ama hakkında daha spesifik olabilir eğer türlerinizin ve neden değişmez sayacı kaldırmak istediğinizi yardım etmeye çalışacağım.

+1

Teknik olarak doğru, ancak asla bir kod incelemesi geçirmeyecek. – nhgrif

+0

Bunu bir döngü üzerinde yapmak için birkaç iyi neden vardır. Bu durumda yazar döngü değişkenini değiştiriyor ve bir while döngüsü Swift'de yapmanın tek yolu. Elbette döngü içindeki döngü değişkenini değiştirmek kendi başına kötü bir işarettir ... – ColGraff

+0

Bunun tam olarak neden bir kod gözden geçirmesini geçemeyeceği. Bu özel durumda, gerçekten gerçekleşmesi gereken bir '.filter' çağrısıdır, ancak döngü değişkenini değiştirmek gerçekten gerekli olan herhangi bir durumda kişisel olarak düşünemiyorum. Bu yüzden benim downvote'u uygulamak zorundayım. Eğer döngüsel değişkeni değiştirmek istediğime dair ikna edici bir örnek eklemek için bunu düzenleyebilirseniz, reddetmeyi kaldırmayı düşünürdüm. – nhgrif

6

İlk etapta bu amaçla bir for döngü kullanmamış olmalısınız. Döngü değişkenini döngü içinde değiştirmek, hata eğilimli ve iyi bir örneğidir, döngü için C stili kullanımdan kaldırılmıştır. map() kullanın

columnsSortTypesArray = columnsSortTypesArray.filter { $0 != "" } 

bu dizi temel alan başka bir dizi doldurmak için, örneğin:

bir dizi kullanım filter() boş dizeleri kaldırmak için Ayrıca

listViews = columnsSortTypesArray.map { sortList($0) } 

: her zaman senkronize tutulması gereken iki (veya daha fazla) diziler varsa, iki (veya daha fazla) özellikleri ile struct WhatEver tanımlayabilir ve bu WhatEver elemanların tek bir dizi kullanımı dikkate yerine.