2016-04-18 45 views
3

this应用有以下语句:雨燕具体的闭包语法

var instanceCount = { globalHappinessInstanceCount++ }() 

在试图了解上述声明我发现,只要我测试过,下面的语句达到同样的结果:

var instanceCount = globalHappinessInstanceCount++ 

Q1。实现第二个不是的第一个陈述是什么? Q2302。 ()括号是否遵循闭包表达式表示空元组,初始化语法,或者什么? I.e应该如何阅读第一个陈述?

回答

1

Q1。实现第二个不是的第一个陈述是什么?

据我所知,它只是创造不增加任何价值不必要的封闭...

Q2。 ()括号是否遵循闭包表达式表示空元组,初始化语法,或者什么? I.e应该如何阅读第一个陈述?

这是方法调用。就像

let foo = { globalHappinessInstanceCount++ } 
foo() 

更新:

我刚刚看了你的链接代码,在类范围的情况下,它是不同的。

class HappinessViewController 
{ 
    var instanceCount = { globalHappinessInstanceCount++ }() 
} 

定义属性instanceCount: Int是那些获得分配的globalHappinessInstanceCount++

它并不比var instanceCount = globalHappinessInstanceCount++

但是在斯威夫特3太大的不同价值,++运营商将被删除,您可能需要更改它到globalHappinessInstanceCount += 1。但问题是结果类型+=运算符是Void而不是Int。所以你必须写它像

class HappinessViewController 
{ 
    var instanceCount: Int = { 
     let instanceCount = globalInstanceCount 
     globalInstanceCount += 1 
     return instanceCount 
    }() 
} 
+0

所以即使在类作用域是第一个语句仍然使用不必要的关闭? –

+0

我认为我们需要推迟{globalHappinessInstanceCount + = 1},因为++是后缀。 –

+0

因此,现在对于Swift 3已弃用++,我们需要添加一个:Int类型规范,一个推迟块和一个return语句。可能这只是为反对已弃用的运营商决策施加压力的充分理由? –