【问题标题】:What is the point of having two different names for the same parameter?同一个参数有两个不同的名称有什么意义?
【发布时间】:2015-08-14 13:35:55
【问题描述】:
func mapEachElement (inArray arr: [Int],  withFunc aFunc: (Int))

为什么会有“inArray”,然后是“arr”……有什么意义呢?

"withFunc" 和 "aFunc" 一样,代码更复杂,阅读也更混乱,为什么还要使用它们?

【问题讨论】:

    标签: swift function parameters


    【解决方案1】:

    inArray 是函数调用者在传递参数时应该使用的外部名称。 arr 是函数实现者在实现中用于引用参数的内部名称。您不必提供外部名称。它使其更具可读性。它更像是让 swift 函数名称和参数像 Objective-C 函数一样可读。

    【讨论】:

    • 所以inArray是从函数调用中的参数传给函数的?
    • 非常感谢,我现在很清楚了。你太棒了!!
    • 很高兴,我的解释有帮助。
    • 这个函数头的一部分让我有点困惑,这里是部分: func mapEachElement (inArray arr: [Int], withFunc aFunc: (Int) -> Int) -> [Int] {
    • 类型让我感到困惑,(int)和[int]
    【解决方案2】:

    对于内部和外部名称不同的问题,我也没有意见。

    有或没有外部名称对我来说很有意义。

    object.BeepXTimes(6) 的参数不需要外部名称,因为函数名称暗示了参数的含义。

    我认为的基本原理是,有时函数外部参数的命名在句子中对调用者来说是有意义的:

    someView.animateInWithDuration(0.25, withTimingFunction: .easeIn)
    

    外部名称withTimingFunction 使函数调用读起来像一个句子,但withTimingFunction 使内部参数名称很糟糕。您可能希望您的参数名称只是timingFunction。拥有单独的内部和外部参数名称可以让您做到这一点。

    不过,对我来说,函数定义所需的额外复杂性似乎并不值得。好消息是默认为内部和外部参数名称使用相同名称创建参数,因此标准语法简单易读。

    【讨论】:

    • 是的,参数名称前的#,这样更高效,也更容易看到,非常感谢!
    • 参数名称前的 # 在 Swift 2.0 中已弃用并产生警告。
    • 对不起。我指的是 Swift 2.0。我希望 Apple 能够发布 Swift 2.0,这样我们就只需要担心单一的语法。
    【解决方案3】:

    这些是内部外部参数名称。

    就像在 Obj-C 中一样,你可能有

    - (void)calculateFoo:(id)foo withBar:(id)bar ...
    
    [object calculateFoo:var1 withBar:var2];
    

    在 Swift 中,我们使用

    func calculateFoo(foo: AnyObject, withBar bar: AnyObject) ...
    
    object.calculateFoo(var1, withBar: var2)
    

    内部名称foobar 只能在函数/方法内部访问。外部名称提供了用于调用函数的参数 labels

    在您的情况下,您需要使用 internal 名称 nibBundle。那是在函数体内可以访问的那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多