代码之家  ›  专栏  ›  技术社区  ›  John White

为什么我需要复制第一个参数的标签以使其在调用中显示?

  •  0
  • John White  · 技术社区  · 8 年前

    我有两个功能:

    func random() -> CGFloat {
        return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
    }
                // here
    func random(min min: CGFloat, max: CGFloat) -> CGFloat {
        return random() % (max - min) + min
    }
    

    我为什么要写 min 在第二个函数中重复两次,以便如下调用:

    random(min: 1, max: 5);
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Ky -    8 年前

    Swift 3之前 ,这是必要的。像这样声明函数:

    func foo(bar: Baz)
    

    隐式更改为:

    func foo(_ bar: Baz)
    

    这就叫它:

    foo(Baz())
    

    所以必须这样声明:

    func foo(bar bar: Baz)
    

    为了这样称呼它:

    foo(bar: Baz())
    

    自Swift 3以来 ,不再需要。现在,像这样声明一个函数:

    函数foo(bar:Baz)
    

    隐式地将其更改为:

    func foo(条形:Baz)
    

    这就叫它:

    foo(bar:Baz())
    

    所以现在必须这样声明:

    函数foo(_bar:Baz)
    

    为了这样称呼它:

    foo(Baz())
    

    为什么?

    其思想是,每个非自文档化参数必须有一个明确的标签,以便阅读代码的人立即知道这是怎么回事 setWidth(5) ,很明显您将宽度设置为 5 ,因此第一个参数不需要标签( setWidth(width: 5) 将是多余的)。然而,对于更细致入微的方法,如 wait(forSeconds: 5) ,尚不清楚 5. 意味着没有 forSeconds: 标签( wait(5) 很容易被视为5毫秒)。

        2
  •  -1
  •   Mudith Chathuranga Silva    8 年前

    从函数中删除第二分钟。顺便说一句,调用函数时,跳过第一个变量名,只输入值。这是调用函数的快速语法

      func random(min: CGFloat, max: CGFloat) -> CGFloat {
          return random() % (max - min) + min
      }
    
      func random() -> CGFloat {
          return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
      }
    
      random(1, max: 5)