有没有办法使用具有相同名称但返回类型不同的函数?

时间:2017-06-17 11:04:27

标签: swift function methods declaration

我的意图如下:

我的第一个功能:

public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String

我可以在print()的上下文中使用它。

我的第二个:

public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> Void

仅用于修改内容。

我知道需要不同的功能签名,但还有更好的方法吗?

2 个答案:

答案 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 {
}