我的意图如下:
我的第一个功能:
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String
我可以在print()
的上下文中使用它。
我的第二个:
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> Void
仅用于修改内容。
我知道需要不同的功能签名,但还有更好的方法吗?
答案 0 :(得分:6)
您可以使用两个具有相同名称,相同参数和不同返回类型的函数。但是如果你调用那个函数并且没有提供编译器调用哪个函数的任何线索,那么它会给出歧义错误,
示例:
func a() -> String {
return "a"
}
func a() -> Void {
print("test")
}
var s: String;
s = a()
// here the output of a is getting fetched to a variable of type string,
// and hence compiler understands you want to call a() which returns string
var d: Void = a() // this will call a which returns void
a() // this will give error Ambiguous use of 'a()'
答案 1 :(得分:3)
您不能在不产生歧义的情况下定义具有相同参数类型的两个函数,但您可以调用函数返回值,就像它是Void
一样。这会产生一个警告,你可以通过指定你的功能结果来保持沉默:
@discardableResult
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String {
}