Swift:为什么在这种情况下没有标记参数?

Swift: Why no labeled arguments in this situation?

对于此代码

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString

我很快就会忘记第三个参数代表什么。

出于某种原因 Swift (2.0) 不允许我这样标记参数:

let documentsPath = NSSearchPathForDirectoriesInDomains(directory: .DocumentDirectory,
domainMask: .UserDomainMask, expandTilde: true)[0] as! NSString  // error

真希望我漏掉了什么!
或者更确切地说:我真的希望我不必错过 Objective-C.

中的单个最佳功能

这与函数的定义方式有关。如果它没有使用命名参数定义,则不能使用命名参数调用它。

NSSearchPathForDirectoriesInDomains 是 C 风格函数(不是方法)或生成内联代码的编译器宏。 (在我看来它是一个 C 函数。)它们都不接受命名参数,所以你不能。

如果您真的想远离未命名参数,请创建一个实用程序 class,它提供接受命名参数的粘合代码,然后调用相关函数。这样你就可以将旧式代码封装在一个地方。额外的函数调用会有(微小的)性能成本,但在几乎所有情况下都不会引起注意。