2015-09-10 109 views
-1

我使用Swift2和我有这两个循环:为什么我++和++我在swift2中产生相同的结果?

for var i: Int = 0; i < 4; i++ { 
    print("the i = \(i)") 
} 

and 

for var i: Int = 0; i < 4; ++i { 
    print("the i = \(i)") 
} 

我得到了完全相同的打印他们两个。告诉我为什么?

+0

http://stackoverflow.com/questions/484462/difference-between-i-and-i-in-一个循环 –

回答

11

i++++i在这种情况下做同样的事情;增加i一个。它们之间的区别在于它们返回不同的值,在循环中无关紧要,因为“增量”部分的返回值将被忽略。

i++(称为“后递增”)返回它被递增之前的i值,而++i(称为“预递增”)返回它被递增的i后的值。例如:

var i = 1 

print(i++) // Prints 1, i is now 2 

print(++i) // Prints 3, i is now 3 

传统上,预增(++i)是稍快,因为它没有增加它时,它返回的值后要记得的i于前值,但我怀疑有任何现代编译器的差异。

2

根据Swift Manualfor语句的语法是:

for initialization; condition; increment { 
    statements 
} 

和发生的事情是,如果条件为真,那么statements将被执行,不是递增这就是为什么你有同样的结果

请仔细阅读本:

for语句A是EXE cuted如下:

  1. 初始化仅评估一次。它通常用于声明和初始化循环剩余部分所需的任何变量。

  2. 评估条件表达式。 如果为真,程序执行语句,并继续执行步骤

  3. 如果为假,程序不执行语句或增量表达,并且程序完成了对语句执行。 增量表达式,并且执行过程返回到步骤2。
0

++ i和i ++是表达式由一个意思增量i相同,但++表达式而我使用之前我装置中进行上述增量++指使用后执行增量。

在for循环中,增量表达式的评估发生在块中的代码执行后,因此在您的示例中,它与您使用的代码无关。

要看到差距,尝试这些:

var j: Int = 0 
for var i: Int = 0; i < 4; i++ { 
    print("the i = \(i) the j = \(j++)") 
} 

var j: Int = 0 
for var i: Int = 0; i < 4; ++i { 
    print("the i = \(i) the j = \(++j)") 
} 
相关问题