斯威夫特:为什么这个斯威夫特挑战赛的答案是-3?

时间:2017-06-21 09:55:14

标签: swift

Swift语言问题

大家好,我是编程新手,所以感谢您的耐心等待。我目前正在通过各种平台学习。以下是我说得对的问题,但我不明白为什么。

如果你能向我解释答案,我将不胜感激。

" c"是什么价值?

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

答案是-3,但我不知道为什么。我所知道的重要性在于b和c之间的区别是不可变的和可变的。

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

2 个答案:

答案 0 :(得分:1)

注意: 该代码仅在Swift 3之前,在Swift 2及更低版本中有效,因此这更像是对算法的讨论。

您有以下代码:

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

让我们逐行采取行动:

var a = 3

这声明了变量a并将其初始化为3a的当前值为3。然后:

let b = a++

这会将b的值设置为a的初始(当前)值,即3,并使用后增量运算符++来增加值a b 的值3设置为a。因此4现在等于b,但3仍为let c = -b

c

-b已声明并初始化为b3目前为c,因此-3变为var a = 3 let b = a; a += 1 c = -b

话虽如此,您的代码相当于:

{{1}}

答案 1 :(得分:0)

首先,代码在Swift 3.0中再次起作用

第一个语句var a = 3中的

使得a = 3的值。 在第二个语句let b = a++中,您实际上并没有增加自其后增量运算符以来的值。因此b的值仍为3。 在第三个陈述中,let c = -b只是使c = -3。