2015-10-26 43 views
0

我在做A Swift Tour_和..在for循環中意味着什麼?

一:

我沒有得到Generics功能的邏輯。它的Design Patterns?對巡演的解釋看起來非常短暫和不清楚。

二:

在這種PICE的代碼創建一個通用的功能,

func repeatItem<Item>(item: Item, numberOfTimes: Int) -> [Item] { 
    var result = [Item]() 
    for _ in 0..<numberOfTimes { //im not getting this line (?) 
     result.append(item) 
    } 
    return result 
} 
repeatItem("knock", numberOfTimes:4) 

我不明白這個語法非常好,拿什麼_..,並在同<行,爲什麼使用?

+1

「_」意味着你不會爲不會使用 –

+0

爲什麼我不使用'一個VAR需要一個名字爲_ in _'而不是'for _ in ..'使它們獨一無二?什麼是泛型@LeoDabus – AndreL

回答

3

_,..<不是泛型的一部分。

_只是一個從不使用的參數的名稱。 通常你會在那裏放置一個變量名稱,如i,然後在塊中使用它,但是因爲你只是在做某些事情而沒有真正使用索引。

..<是起始值和結束值之間的範圍的簡寫。然後1..<5會產生範圍1,2,3,4

也有一個範圍的簡單...,讓你的最後一個值5

通用代碼,使您能夠編寫靈活,可重複使用的功能和 類型,可以與任何類型的工作,但需符合您的要求,即 定義。您可以編寫避免重複的代碼,並以清晰,抽象的方式表達其意圖。 Generics

+0

「可以與任何類型一起工作的函數和類型」意味着我可以返回一個'String'或'Int'?也gona結帳鏈接 – AndreL

+0

你可以一直有任何返回類型,但泛型使你能夠基本上做任何類型的基於類型的操作。 所以作爲一個例子,如果你有一個常規的數組操作,你只能用一個Int數組運行這個函數,但是你可以定義它的泛型,它可以運行一個具有任何值的數組。 – Moriya

+0

我添加到蘋果解釋的鏈接有一個很好的例子與堆棧。如果沒有泛型,你會如何爲任何值寫入堆棧類型? – Moriya

0
for _ in 0..<numberOfTimes { 
    (something) 
} 

等同於:

for(var nameForWhichIdontCare = 0; nameForWhichIDontCare < numberOfTimes { 
    (something) 
} 

所以:

_在需要一個名字的地方使用,但你不關心,所以基本上拋棄從一開始的名字。

..<是一個範圍可達一個數字。

...是一個範圍,包括一個數字。

2

當您在別處不使用變量時,可以使用下劃線。因此,如果您循環使用某個範圍的數字,並且您沒有使用索引,則可以使用_。這只是語法糖。

0..<4表示表示開始從0開始計數,並且計數到4-1 = 3。您可以使用0...4包括最後一個數字,這意味着*從0開始計數,並且計數到4`。

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

雖然,

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

考慮在C守舊派for循環:

for var i = 0; i < numberOfTimes; i++ { 
    result.append(item) 
} 

呸,大量的代碼只是重複result.append(item)numberOfTimes!斯威夫特有一個語法速記:a..<b的意思是「從迭代到小於b」這樣你for循環可改寫爲:

for i in 0..<numberOfTimes { 
    result.append(item) 
} 

但你不使用i循環的體內無論是。所有你想要的是重複它numberOfTimes。所以你不關心迭代器的名字:i,xz。因此,你甚至不需要申報,只是用_替換爲:

for _ in 0..<numberOfTimes { 
    result.append(item) 
}