这是一种烦恼,而不是任何批评。
我倾向于在我的 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) {
问题是编译器给出了这个警告:
现在,我总是在 API 中使用“in...”参数。它帮助我跟踪从函数外部传入的内容。我很少使用外部名称。
但是,该功能的使用者只对外部名称感兴趣。
我很困惑为什么 Xcode 不希望我使用这些。
有什么方法可以抑制警告,还是我在这里做错了什么?
(是的,我仍然需要记录第一个参数,这就是我现在正在研究这个的原因)。
根据 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。
有关如何消除警告,请参阅此帖子。在撰写本文时,目前这是不可能的。