Swift 使用重载函数作为第一类公民

Swift 使用重载函数作为第一类公民,swift,first-class-functions,Swift,First Class Functions,假设我们在一个类中有几个重载函数: func appendToABC(string s: String) -> String { return "ABC \(s)" } func appendToABC(duplicatedString s: String) -> String { return "ABC \(s)\(s)" } 我们有一些API将函数作为参数: func printString(function: (String) -> String) {

假设我们在一个类中有几个重载函数:

func appendToABC(string s: String) -> String {
    return "ABC \(s)"
}

func appendToABC(duplicatedString s: String) -> String {
    return "ABC \(s)\(s)"
}
我们有一些API将函数作为参数:

func printString(function: (String) -> String) {
    print(function("ASD"))
}
如何将appendToABC函数之一作为参数传递给printString函数

我曾考虑过用闭包来包装函数,但看起来不太好

printString { appendToABC(duplicatedString: $0) }

这是Swift中的已知限制。有一种方法可以解决这个问题。目前唯一的解决方案是关闭


请注意,Swift中的许多情况都是如此。您也不能将属性直接引用为函数,即使它们的行为类似于函数。你必须使用闭包。甚至有些自由函数也不能直接传递(
print
是最常见的例子)。

如果函数的参数或返回类型不同,则可能会发生这种情况()。但我认为如果函数只在外部参数名称上有所不同,这是不可能的。