2014-06-06 66 views
2

我今天瞭解了元組,概括地說,他們允許你存儲幾個值,三元組的一個例子是什麼時候應該使用元組而不是對象,反之亦然?

let exampleTuple = (exampleString: "This", exampleInt: 1) 

,我們可以很容易地訪問一個元組的任何值與一個點符號,例如:

exampleTuple.exampleString 

對我來說這似乎極其相似持有某些信息的對象,我可能失去了一些東西還是不能完全理解的元組,因此我要求一個解釋,當我們要使用的元組或對象?

回答

2

按照book on Swift

元組是相關值的臨時組有用。它們不適合創建複雜的數據結構。

它們通過數據範圍定義「臨時」:如果一段數據永遠不會離開單個方法的範圍或同一對象的一組方法,那麼它可以被認爲是臨時的,即使它可能在應用程序的整個生命週期中持續存在。

如果您的數據結構在臨時範圍外有用 - 例如,因爲它需要從您的類的公共方法返回,請將其建模爲類或結構,而不是元組。

另一個重要的考慮是將行爲與您的數據關聯:如果您的對象需要有方法,請爲它們使用類。僅對沒有行爲的數據使用元組。

+0

我正想通過類似的東西來回答這個問題:「這就像一個元組對象(靜態),但語言將其定義爲一個基本類型?「。 然後我想即使是一個整數就像一個只有一個屬性的對象,然後一個對象只是一個字節數組。定義對象類型只是定義瞭如何解釋它所引用的字節? –

+1

@Mayerz它看起來像元組是swift中的一個基本類型,完全得到編譯器的強大支持。他們感覺像你通過例子定義的結構體。就對象類型而言,它們可以靜態或動態地定義。在元組的情況下,定義看起來是靜態類型的。 – dasblinkenlight

+0

好的謝謝你的精確Blinken –

1

元組在Python中大量使用,在我看來,他們在Swift中的用途大多相同。把它想象成一個快速的方法來將多個值從一個點傳送到另一個點。在雨燕書和在Python中經常使用的模式顯示了一個例子是從方法返回一個HTTP狀態代碼和文本主體:

func greeting() { 
    return (200, "Hello World") 
} 

... 

let (status, body) = greeting() 
if 200 == status { 
    println(body) 
} 
else if status >= 400 { 
    println("Error \(status): \(body)") 
} 

當然,這只是一個用例,但我認爲它得到了重點。內置的例子是功能enumerate(),它返回的(index, value)一個元組:

for (idx, val) in enumerate(["a", "b", "c"]) { 
    println("Index \(idx): \(val)") 
} 
相關問題