2016-07-29 67 views
4

我正在學習使用learnxinyminutes.com未使用的變量和「_」

我有一個很難的現場(下圖)在理解上的例子成分迅速,即在let語句中使用下劃線而不是變量名稱。

// Variadic Args 
func setup(numbers: Int...) { 
    let _ = numbers[0] 
    let _ = numbers.count 
} 

據我所知,SWIFT希望你使用下劃線,如果你從來沒有聲明變量,但1)你爲什麼要申報你從不使用的變量? 2)如果您使用_,有沒有辦法將這些值取出。 3)如果是這樣,怎麼樣?

+0

據我所見,它只是試圖證明'numbers'是一個數組(你可以對它進行索引,它有一個'.count'),而不用實際使用這些值(因此用'_'將它們扔掉) 。 – melpomene

+0

可能的重複[下劃線在這種情況下意味着什麼?](http://stackoverflow.com/questions/32656095/what-does-the-underscore-mean-in-this-case) – Hamish

回答

2

1)你爲什麼要聲明你永遠不會使用的變量?

一般你不會!雖然有些情況下你可能想要,例如Danny Buonocore的例子。另一個例子可能是這樣的:假設你想在做某件事之前檢查一個變量是否爲非零,儘管後面的代碼不需要該變量。 (警戒聲明在這些情況下可能更有用)。

if let _ = titleString { 
// Do something that doesn't use titleString, but where it being non-nil means this operation is valid 
} 

另一個例子是用Swift函數。每次調用函數時,都必須標識第二個,第三個等參數的名稱。例如:

func externalizedParameters(first: Int?, second: Int?) { 
... 
} 

這被稱爲使用externalizedParameters(5, second: 6)

但是,如果你正在做一些微不足道的事情,並且函數名已經明確了這兩個參數是什麼,例如使用交換操作,則可能不希望強制調用者顯式聲明第二個參數的名稱。在這種情況下,你可以使用「_」,因爲你不關心這個外部化參數的名稱:

func swap(first: Int?, _ second: Int?) { 
    ... 
} 

這可以被稱爲swap(5, 6)而不是swap(5, second: 6)

2)有沒有辦法讓這些值,如果你使用_。 3)如果是這樣,怎麼樣?

沒有。如果要使用該值,則需要命名該變量。

+1

在此接受的答案問題也提供了更深入的洞察力。 http://stackoverflow.com/questions/32656095/what-does-the-underscore-mean-in-this-case。這不是直接重複的,因爲我有關於下劃線的多個問題,但未來的用戶應該參考兩者。 –

1

一個例子是一個循環,你不一定需要索引。

for _ in 0..<10 { 

} 

在swift中,您還可以外化參數的名稱。這允許呼叫者的名字來傳遞,而不是爲了:

func myFunction(param1:String, param2:String) { 

} 

myFunction(param2: "second value", param1: "first value"); 

如果你不希望外部化參數的名稱,可以包括下劃線之前,像這樣:

func myFunction(param1:String, _ param2:String) { 

} 

在這種情況下,您必須傳遞該值以將param2設置爲第二個參數,並且不能使用第一個示例中看到的命名方案。

0

如果您需要使用變量內部的值,請聲明一個名稱而不是_。下劃線說,我知道這個調用返回一個值,但我們不打算使用它,所以它不需要名稱。 Swift爲未使用的函數調用結果發出警告,所以這是一種抑制該警告的方法。