【问题标题】:Argument labels before parameters in functions - possible bug in Swift Markup?函数中参数之前的参数标签 - Swift Markup 中可能存在错误?
【发布时间】:2016-08-19 07:29:18
【问题描述】:

我在一个类中有以下函数:

/// Returns the weather conditions at the given location.
/// - parameter for: A location on the Earth's surface.
/// - returns: If found, the `WeatherConditions` at the supplied location otherwise nil.
public func conditions(for location: Location) -> WeatherConditions? {
    return nil  // The actual code is not important to the question.
}

如下调用let myWeather = conditions(for: myLocation)

代码运行良好,问题在于文档。下图是conditions 函数的“快速帮助”窗口中显示的内容。鉴于函数的用户必须使用外部参数标签 (for) 并且我已经明确记录了该标签,所以快速帮助窗口中的参数行不应该是 Parameters for 而不是 Parameters location

这是 Xcode 中的错误,还是显示(内部)参数名称而不是外部参数标签的原因?

【问题讨论】:

  • 我总觉得有点奇怪,但我的猜测是“外部参数名称”作为调用站点的标签,而“内部参数名称”作为实际的名称。标签应该使函数调用读起来有点像句子或短语。在 Swift 3 约定中,这些标签通常是介词而不是名词,并且用它们的名称(通常是名词)而不是标签(可以是介词)来描述参数是有意义的。如果我的猜测是正确的,我更愿意——为了清楚起见——他们会使用“标签”和“名称”而不是“外部”和“内部”名称。
  • XCode 应该真的可以制作两个版本的文档。一种用于 API 的使用者,无需访问源代码,仅在声明行中显示外部名称,并使用外部名称进行参数描述。另一个用于方法的实现者,在声明中显示名称并在参数描述中使用内部名称。我认为 XCode 还不能区分这两个视图。
  • @Codo 我倾向于同意但怀疑它是否会发生。同时,我将此作为错误 (27921906) 提出。我会在这里更新任何回复。
  • 我也主要将其视为一个错误。如果 XCode 不提供内部和外部视图,它应该显示外部视图,因此只在代码中使用参数名称 for

标签: swift xcode swift3 xcode8


【解决方案1】:

很简单,for 不是参数; location 是。快速帮助是记录参数。

如前所述,希望快速帮助将for 识别为地球表面上的一个位置,这对读者来说有点令人费解。

SPLGAPI Design Guidelines 使用术语“参数”和“参数标签”(如您的问题标题)而不是“内部参数”和“外部参数”(这可能会导致您感到困惑)提高)。鉴于此,参数位于快速帮助中的参数标题下,参数标签出现在声明中。

【讨论】:

    【解决方案2】:

    “for”字不是必填字,使用时为了更好地理解代码是可选的。

    在 Swift 3 书架上:

    参数标签的使用可以允许以富有表现力的类似句子的方式调用函数,同时仍然提供可读的函数体并且意图明确

    没有这个词,写代码会是

    let myWeather = conditions(myLocation)
    

    当我们定义方法时,总是可以使用 with:、using:、for:、withLabel: 等词。

    【讨论】:

    • 我猜 Vince O'Sullivan 想要修复文档而不是更改他的方法的签名。这并没有真正回答它。
    • 但我不明白为什么我们要把文档中的“位置”这个词替换为“for”这个词。如果是参数,它应该代表我们在代码中作为变量使用的单词,不是吗?
    • 他问“快速帮助窗口中的参数行不应该读取参数而不是参数位置”,所以这就是为什么我把答案放在参数标签的东西上。
    • 即使在调用中可以省略标签,参数在文档中仍然需要一个名称。对于方法的调用者,名字适用,即 for 在这种情况下。这就是文档中所期望的。第二个名称(在本例中为 location)是方法实现使用的内部名称。它应该对消费者隐藏。
    【解决方案3】:

    如果您希望文档显示,那么您需要在 cmets 中显示为:

    /// Returns the weather conditions at the given location.
    /// - parameter `for Location`: A location on the Earth's surface.
    /// - returns: If found, the `WeatherConditions` at the supplied location otherwise nil.
    public func conditions(for location: CLLocation) -> AnyObject? {
        return nil  // The actual code is not important to the question.
    }
    

    【讨论】:

    • 在参数下显示“无描述”,内部名称 location 可见两次,参数描述现在显示为一般描述的要点。这比原来的输出还要糟糕,当然也不是文斯·奥沙利文想要的。
    • 因为描述项目符号使用标签+参数复合,而参数部分仅描述位置...我不知道...对我来说文档很清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多