2017-06-21 61 views
0

Swift语言问题斯威夫特:为什么这个Swift Challenge -3的答案是?

嗨,大家好,我是编程新手,所以感谢您的耐心。我目前正在通过各种平台进行学习。下面是一个我很对的问题,但我不明白为什么。

如果你能解释我的答案,我将不胜感激任何人的帮助。

“c”的值是什么?

var a = 3 
    let b = a++ 
    let c = -b 

答案是-3,但我不知道为什么。我知道的意义在于b和c之间的区别是不可变的,而且是可变的。

a **是一个增量(相当于+ = 1),所以我会认为答案是-1?

+6

代码不斯威夫特卡伦特3再编译,'--'和''++已被删除。 –

回答

1

注意:该代码仅在Swift 3之前在Swift 2和更低版本中工作,因此这变得更多的是关于算法的讨论。


你有这样的代码:

var a = 3 
let b = a++ 
let c = -b 

让我们把它行由行:

var a = 3 

声明一个变量a,并将其初始化3。当前值a3。然后:

let b = a++ 

此的b的值设置为的a初始(当前)值,这是3并使用递增运算符++增加a后的b值是设置为3。所以a现在等于4,但b仍然是3

let c = -b 

c声明并初始化为-b,并b目前3,所以c变得-3


话虽这么说,你的代码就相当于:

var a = 3 
let b = a; a += 1 
c = -b 
+0

什么是晶圆厂的答案,非常感谢。 – rb2030

+0

@ rb2030不客气! –

0

首先代码不会在雨燕3.0

了工作在第一条语句var a = 3使得A = 3 值在第二条语句let b = a++你实际上并没有增加,因为它的后递增操作的价值。因此b的值仍然为3. 在第三种说法中,let c = -b只是使c = -3。

+0

非常完美的感觉,谢谢。 – rb2030