使用重载函数作为一等公民

时间:2016-01-08 13:17:57

标签: 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) {
    print(function("ASD"))
}

我们如何将appendToABC函数之一作为参数传递给printString函数?

我已经考虑过使用闭包来包装函数,但它看起来不太好

printString { appendToABC(duplicatedString: $0) }

1 个答案:

答案 0 :(得分:5)

这是Swift的一个已知限制。有open proposal来解决它。目前唯一的解决方案是关闭。

请注意,Swift中的许多内容都是如此。您也不能直接将属性称为函数,即使它们的行为与函数类似。你必须使用一个闭包。甚至一些免费函数也不能直接传递(print是最常见的例子)。