Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 这段代码中的while循环是如何工作的?_Swift - Fatal编程技术网

Swift 这段代码中的while循环是如何工作的?

Swift 这段代码中的while循环是如何工作的?,swift,Swift,我正在尝试完成一个关于LeetCode的测试,我在Swift中找到了这个解决方案,但我真的不确定在这个while代码循环中会发生什么: func getSum(a: Int, _ b: Int) -> Int { var a = a var b = b while b != 0 { (a, b) = (a ^ b, (a & b) << 1) } return a } func getSum(a:Int,b:I

我正在尝试完成一个关于LeetCode的测试,我在Swift中找到了这个解决方案,但我真的不确定在这个while代码循环中会发生什么:

func getSum(a: Int, _ b: Int) -> Int {
    var a = a
    var b = b

    while b != 0 {
        (a, b) = (a ^ b, (a & b) << 1)
    }
    return a
}
func getSum(a:Int,b:Int)->Int{
变量a=a
变量b=b
而b!=0{
(a,b)=(a^b,(a&b)
(a,b)=(a^b,(a&b)
(a,b)=(a^b,(a&b)作为补充-这解释了所使用的位运算符。请注意,在
getSum(…)中进行
循环时,不需要使用可变局部范围变量和
函数,但可以在递归调用函数本身时使用相同的位运算符计算,例如

func getSum(a: Int, _ b: Int) -> Int {
    if b == 0 { return a }
    return getSum(a ^ b, (a & b) << 1)
}
func getSum(a:Int,b:Int)->Int{
如果b==0{返回a}
返回getSum(a^b,(a&b)作为对的补充-这解释了所使用的位运算符。还请注意,在
getSum(…)
函数中,当
循环时,不需要使用可变的局部范围变量和
,但可以在对函数本身的递归调用中使用相同的位运算符计算,例如

func getSum(a: Int, _ b: Int) -> Int {
    if b == 0 { return a }
    return getSum(a ^ b, (a & b) << 1)
}
func getSum(a:Int,b:Int)->Int{
如果b==0{返回a}

返回getSum(a^b,(a&b)但是请注意,将操作拆分为两行会做一些不同的事情,因为第二行将使用已更新的
a
值,而不是原始值。这是一个非常好的观点,我想知道为什么这样做!但是请注意,将操作拆分为两行会做一些不同的事情,因为第二行将使用已经更新的
a
值,而不是原来的值。这是一个非常好的观点,我想知道为什么这样做!在我看来,
如果b==0{return a}
会更容易理解。我不明白为什么人们试图用
guard
来代替所有的提前返回–在你的提示下,我同意!我和许多人一样,被-
guard
-flu!的提前返回感染了!谢谢:)在我看来,
如果b==0{return a}
会更容易理解。我不明白为什么人们试图用
guard
来取代所有的提前退换货–在你的提示下,我同意!我和许多人一样,被-
guard
-流感的提前退换货感染了!谢谢:)