Swift 有没有一种方法可以使用名称相同但返回类型不同的函数?

Swift 有没有一种方法可以使用名称相同但返回类型不同的函数?,swift,function,methods,declaration,Swift,Function,Methods,Declaration,我的意图如下: 我的第一个功能: public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String 只是为了修改一些东西 我知道需要一个不同的函数签名,但有没有更好的方法?您可以有两个名称相同、参数相同、返回类型不同的函数。但若你们调用那个函数,却并没有向编译器提供任何线索,告诉编译器调用这两个函数中的哪一个

我的意图如下:

我的第一个功能:

public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String
只是为了修改一些东西


我知道需要一个不同的函数签名,但有没有更好的方法?

您可以有两个名称相同、参数相同、返回类型不同的函数。但若你们调用那个函数,却并没有向编译器提供任何线索,告诉编译器调用这两个函数中的哪一个,那个么它就会产生歧义错误

示例:

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()'

您不能定义两个参数类型相同的函数而不产生歧义,但可以调用返回值的函数,就像它是
Void
。这将生成一个警告,您可以通过将函数结果指定为可丢弃来消除该警告:

@discardableResult
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String {
}
@discardableResult
public mutating func replaceSubstringInRange(range:CountableClosedRange,with string string:string)->string{
}

No,但您可以使用返回字符串的函数,就像它是
Void
。这听起来很完美。我怎样才能实现呢?只需调用它,不要将结果赋给任何变量。Swift将允许您这样做。但随后会出现警告:“调用…的结果未使用”。您还需要将其标记为
@discardableResult
,以指示不必使用返回值(比较)。但我不建议使用
mutating
方法,该方法也会返回突变的实例——如果您在单独的一行上调用它,然后再处理突变的实例,那么该方法的用法就更清楚了。否则,乍一看可能会发现该方法正在创建一个新字符串,而不是进行变异。就是这样。谢谢这应被视为有效答案。函数签名也包括返回类型。
@discardableResult
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String {
}