有没有办法在 Swift 中抑制“用于记录参数的外部名称”警告?

问题描述 投票:0回答:1

这是一种烦恼,而不是任何批评。

我倾向于在我的 Swift 中使用标准 headerdoc 样式,如下所示:

/* ################################################# */
/**
 Perform a server-based search.
 
 - parameter specification: The search specification.
 - parameter completion: A tail completion proc (may be called in any thread).
 */
public func meetingAutoRadiusSearch(minimumNumberOfResults inMinNumber: Int, specification inSpecification: SearchSpecification, completion inCompletion: @escaping QueryResultCompletion) {

问题是编译器给出了这个警告:

enter image description here

现在,我总是在 API 中使用“in...”参数。它帮助我跟踪从函数外部传入的内容。我很少使用外部名称。

但是,该功能的使用者只对外部名称感兴趣。

我很困惑为什么 Xcode 不希望我使用这些。

有什么方法可以抑制警告,还是我在这里做错了什么?

(是的,我仍然需要记录第一个参数,这就是我现在正在研究这个的原因)。

swift function warnings docc headerdoc
1个回答
1
投票

根据 Swift API 设计指南,这不是您应该如何命名参数。

选择参数名称以服务于文档。即使参数名称不出现在函数或方法的使用点,它们也起着重要的解释作用。

选择这些名称以使文档易于阅读。 [...]

参数名称是为了“服务文档”,而不是(仅仅)服务于you(实现该功能的人)。以这种方式命名参数根本不是“Swifty”。


如果要标记输入哪些参数,一种方法是使用如下所示的属性包装器:

@propertyWrapper
struct Input<T> {
    let wrappedValue: T
}

public func someFunction(@Input x: Int, @Input y: Int) {
    // ...
}

虽然这对我来说没有多大意义 - 当然所有非 inout 参数都是“输入”?


如果你确实想要一个在函数中带有“in”前缀的named符号,你可以编写一个函数体宏(这里我称之为

InputParameterNames
),使用时如下:

@InputParameterNames
public func someFunction(@Input x: Int, @Input y: Int) {
    // ...
}

扩展到

public func someFunction(@Input x: Int, @Input y: Int) {
    let inX = x
    let inY = y
    // ...
}

它将在参数列表中找到标记为

@Input
的参数,并为每个参数生成一个
let
声明。我不会在这个答案中编写这个宏的实现,因为我不赞成以这种方式编写 Swift。

有关如何消除警告,请参阅此帖子。在撰写本文时,目前这是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.