2016-03-08 36 views
2

我是新來的斯威夫特抱歉,如果這可能看起來太簡單。但我無法從任何地方找到答案。使用var = {}()的含義的swift語法?

我想了解下面的這個語法。該代碼有=,然後{..}()爲什麼需要()結束,也=簽署?

var productLines: [ProductLine] = { return ProductLine.productLines() }() 

據我所知,計算變量會是這樣的..這下面

var varA: [arrayOutput] { return someArray } 

究竟是什麼={ return something }()叫或SWIFT是什麼意思?

+4

'{...}'是一個閉包(內聯函數定義)。 '()'調用該函數'。 – Sulthan

+1

這是做什麼的,最初用變量'productLines'設置閉包的結果{return ProductLine.productLines()}'()'調用閉包函數。所以'productLines'的值可以被覆蓋。所以不,這不是一個計算的屬性。 –

+1

http://www.apeth.com/swiftBook/ch02.html#SECdefineandcall – matt

回答

8

您看到的是一個用於設置變量初始值的閉包。閉包可以被描述爲匿名代碼塊。

這是你的代碼是什麼樣子:

var productLines: [ProductLine] = { return ProductLine.productLines() }() 

讓我擴大你這樣的代碼:

var productLines: [ProductLine] = {() -> [ProductLine] in 
    return ProductLine.productLines() 
}() 

本身包含下面的代碼的封閉

{() -> [ProductLine] in 
    return ProductLine.productLines() 
} 

的兩個圓括號()用於執行閉包。 所以你看到的不是一個計算屬性。你因此隨後能夠改變productLines值是這樣的:

productLines = [ProductLine]() 

如果這是一個計算的屬性,而不是,你會得到這樣的錯誤:

無法指定屬性:代理產品是一個只能得到的屬性

+0

非常感謝你這正是我所需要的。 – JPC

+0

優秀的答案。 (投票)。我正在準備寫一個解釋,但你覆蓋了所有的基礎。 –