8

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

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) }
4

1 回答 1

5

这是 Swift 中的一个已知限制。有一个公开的提案来解决这个问题。目前唯一的解决方案是关闭。

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

于 2016-01-08T14:14:42.363 回答