简单的诠释和错误(Simple Int sum error)

2019-09-29 18:49发布

我刚刚开始接触斯威夫特,从Objective-C的未来。 我有这样一行:

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

我得到一个错误的说法: Expected ',' separator后‘计数’。

究竟为什么我不能做一个简单的总和,计数-1? 斯威夫特的小怪癖,我还没有学会,或它在早晨太早...

Answer 1:

参照苹果的“ 词法结构 ”文档:

围绕操作员的空白被用来确定操作者是否被用作一个前缀操作符,一个后缀运算符,或二进制运算符。 这种行为被概括为以下规则:

  • 如果运营商已经围绕两侧或周围没有任何一方的空白,它被视为一个二元运算符。 作为一个例子,在一个+++ b中的+++操作者和一个+++ b的处理作为二进制运算符。

  • 如果运营商对只有左侧的空白,它被视为一个前缀元运算符。 作为一个例子,在一个+++ b中的操作者+++被视为前缀一元运算符。

  • 如果运营商对只有右边的空格,它被视为一个后缀一元运算符。 作为一个例子,在一个+++ b中的操作者+++被视为一个后缀一元运算符。

  • 如果运营商在左侧没有空格,但由点(。),紧接着,它被视为一个后缀一元运算符。 作为一个例子,在一个+++ b。所述+++操作者将被视为一个后缀一元运算符(一个+++ .B而非+++ .B)。

++--已经从斯威夫特3.删除有关更多信息,请查看0004斯威夫特发展的建议 。

意味着在减去运营商self.flights.count -1为前缀的一元运算符(第二条规则)进行处理。

为了使它更清楚,编译器读取self.flights.count -1:self.flights.count,旁边有一减一 ,而不是减法运算。 通过应用第二个规则,负是为前缀元运算符1

显然,我们希望编译器把减号运算符二元运算符,所以你应该做的是周围添加减去两侧(应用第一规则)空白:

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

希望这有助于。



Answer 2:

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

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


文章来源: Simple Int sum error
标签: swift sum