是否必须在闭包中使用 "in" 关键字?如果不是,那么 swift 中的闭包和计算 属性 在语法上的区别是什么?

Is it complusory to use "in" keyword in closure? If no then what is the syntax wise difference between closure and computed property in swift?

在 swift 中,get 和 set 的使用不是强制性的,如果在闭包中使用“in”也不是强制性的,那么如何区分闭包和计算 属性?

就像下面的例子一样,greet 是一个闭包或计算 属性?

var greet = {
  return 4+3
}

greet()

greet 是一个闭包。计算出的 属性 是

var greet : Int {
  return 4+3
}

greet // without parentheses

并且闭包中的“in”是也不是强制如果传递了参数(顺便说一下return关键字不是强制性的)

var greet = { x in
  4+x
}

greet(4)

除非您使用 shorthand 语法

var greet = {
   4+[=12=]
}

greet(4)

需要传递参数时使用关键字in

函数和计算属性之间也有区别:如果你使用符号=,你就是把你的变量等同于一个函数,所以你需要调用greet().

如果 = 你使用 :,你有一个计算 属性,调用 greet

以下是不同案例的列表:

        // greet is a function, you need to call greet()
        var greet = {
          return 4 + 3
        }
        print(greet()) // 7

        // greet2 is a computed property, you need to call greet2
        var greet2: Int {
            return 4 + 3
        }
        print(greet2) // 7

        // greet3 is a function that receives one parameter, you need to call greet3(someInt)
        var greet3 = { (parameter: Int) -> Int in
          return 4 + parameter
        }
        print(greet3(4)) // 8

        // greet4 is like greet3, but the type is declared outside
        var greet4: (Int)->Int = { parameter in
            return 4 + parameter
        }
        print(greet4(5)) // 9

        // greet5 is like greet4, where you define the function later
        var greet5: (Int) -> Int
        greet5 = { parameter in
            return 4 + parameter
        }
        print(greet5(6)) // 10