i
neden değiştirilemediğini anlamak için for…in
'un ne anlama geldiğini bilmek gerekir. for i in 0..<10
aşağıdaki derleyici tarafından genişletilir:
var g = (0..<10).generate()
while let i = g.next() {
// use i
}
döngü etrafında her zaman, i
taze bildirilen değişken, jeneratör üzerinde next
aramasını sonraki sonucu unwrapping değeridir. while
böyle yazılır edilebileceğini Şimdi
:
while var i = g.next() {
// here you _can_ increment i:
if i == 5 { ++i }
}
ama tabii, bu yardımcı olmaz - g.next()
hala döngü etrafında 5 dahaki sefere oluşturmak için gidiyor. Vücuttaki artış anlamsızdı.
Bu nedenle, for…in
, var
sözdizimini, döngü günlüğü sayacısını bildirmek için desteklemiyor - nasıl çalıştığını anlamadıysanız çok kafa karıştırıcı olurdu.
(neler olup bittiğini görebileceğiniz where
'dan farklı olarak var
işlevselliği bazen func f(var i)
modelinin nasıl olabileceğine benzer şekilde yararlıdır). Değiştirme
// iterate over every other integer
for i in 0.stride(to: 10, by: 2) { print(i) }
// skip a specific number
for i in (0..<10).filter({ $0 != 5 }) { print(i) }
let a = ["one","two","three","four"]
// ok so this one’s a bit convoluted...
let everyOther = a.enumerate().filter { $0.0 % 2 == 0 }.map { $0.1 }.lazy
for s in everyOther {
print(s)
}
:
ne istediğini (C girişfor
veyawhile
başvurmadan) döngü, sizin daha iyi bahis belli yinelemeleri atlamak için iseilgili değerleri atlar bir jeneratör kullanmaktır 'for' için yineleyici genellikle kötü kod olarak kabul edilir. 'in' için hiçbir yineleyici yoktur,' sayı 'bir yineleyici değildir. Değeri, döngüyü herhangi bir şekilde etkilemez. – Sulthan