2017-06-17 58 views
2

我的目的如下:有沒有辦法使用具有相同名稱但返回類型不同的函數?

我的第一功能:

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

,我可以在print()例如上下文中使用它。

我的第二個:

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

剛剛修改的東西。

我知道有一個不同的函數簽名需要,但有沒有更好的方法?

+0

沒有,但你可以使用函數返回'String'好像是'Void'。 – dasblinkenlight

+0

聽起來很完美。我怎麼能意識到這一點? –

+0

只需調用它,不要將結果分配給任何變量。斯威夫特會讓你這樣做。 – dasblinkenlight

回答

2

無法定義具有相同的參數類型兩種功能不會產生歧義,但您可以調用返回值的函數,就好像它是Void。這會產生一個警告,您可以通過指定的函數的結果廢棄的沉默:

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

就是這樣。謝謝! –

4

您可以擁有兩個具有相同名稱,相同參數和不同返回類型的函數。但是,如果你調用該函數並沒有提供任何線索編譯兩個函數來調用它,那麼它給出模棱兩可的錯誤,

例子:

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

這應該被認爲是有效的答案。函數簽名還包括返回類型。 – user3441734

相關問題