2016-12-05 74 views
1

我剛從Swift開始,來自Objective-C。我有這條線:簡單的詮釋總和錯誤

self.collectionView?.insertItems(at: [IndexPath.init(row: (self.flights.count -1), section: 0)]) 

我在'count'後出現錯誤:Expected ',' separator

爲什麼我不能做一個簡單的總和,計數-1?斯威夫特的小怪癖,我還沒有學會,或它在早晨太早......

+1

將'-'放在'1'前面沒有空格時Swift將'-'解釋爲前綴一元運算符。並且你有'self.flights.count(-1)',這在語法上是不正確的'' – user28434

+2

請參閱[什麼是空格在swift中的規則](http://stackoverflow.com/questions/31301715/what-是最規則換空間,在-SWIFT)。 –

+1

我想你的意思是「簡單的國際減排錯誤」... :) –

回答

2

參考蘋果的「Lexical Structure」文檔:

圍繞操作員的空白被用來確定一個操作者 是否被用作一個前綴操作符,一個後綴運算符,或二進制 運算符。此行爲歸納爲以下規則:

  • 如果運營商有大約兩側或周圍沒有任何一方的空白,它是作爲一個二元運算處理。例如,+++ b和a +++ b中的+++ 運算符被視爲二元運算符。

  • 如果一個運算符僅在左側有空白,它將被視爲前綴一元運算符。例如,+++ b 中的+++運算符被視爲前綴一元運算符。

  • 如果運算符僅在右側有空白,則將其視爲後綴一元運算符。例如,+++ b 中的+++運算符被視爲後綴一元運算符。

  • 如果一個運算符在左邊沒有空格,但後面緊跟着一個點(。),那麼它將被視爲後綴一元運算符。 作爲示例,+++。b中的+++運算符被視爲後綴 一元運算符(a +++ .b而不是+++ .b)。

++--已經從斯威夫特3.刪除有關更多信息,請0004 Swift evolution proposal

意味着self.flights.count -1中的minus運算符被視爲前綴一元運算符(第二條規則)。

爲了使其更清楚,編譯器將self.flights.count -1讀取爲:self.flights.count,其旁邊有一個減號,但不是減法運算。通過應用第二條規則,減號是1的前綴一元運算符。

顯然,我們希望編譯器把減號運算符二元運算符,所以你應該做的是添加空格周圍負兩側(應用第一條規則):

self.collectionView.insertItems(at: [IndexPath.init(row: (flights.count - 1), section: 0)]) 

希望這有所幫助。

0

所有你需要做的就是添加一個空格

self.collectionView?.insertItems(at: [IndexPath.init(row: (self.flights.count - 1), section: 0)])