使用重载函数作为第一个 class 公民
Using overloaded functions as first class citizens
假设我们在一个函数中有多个重载函数class:
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: [=13=]) }
这是 Swift 中的已知限制。有一个 open proposal 来解决它。目前唯一的解决办法是闭包。
请注意,Swift 中的许多事情都是如此。您也不能将属性直接作为函数引用,即使它们的行为类似于函数。您必须使用闭包。甚至一些自由函数也不能直接传递(print
是最常见的例子)。
假设我们在一个函数中有多个重载函数class:
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: [=13=]) }
这是 Swift 中的已知限制。有一个 open proposal 来解决它。目前唯一的解决办法是闭包。
请注意,Swift 中的许多事情都是如此。您也不能将属性直接作为函数引用,即使它们的行为类似于函数。您必须使用闭包。甚至一些自由函数也不能直接传递(print
是最常见的例子)。