Das Problem hierbei ist, dass Sie Int
erweitern eine Variable abs
genannt hinzuzufügen - was auch der Name der Funktion ist, dass Sie rufe an.
Wenn Sie versuchen, die Funktion aufrufen abs()
auf dem Int
, sieht es die Variable abs
die Sie erstellt haben, und es ist verwirrt, weil sie denkt, dass Sie diese Variable zurückkehren und versuchen, nicht verstehen, warum Sie es Senden eines Parameters .
Wenn Sie Ihre Variable in absoluteValue
oder etwas anderes wirklich umbenennen, sollte es funktionieren.
let value = -13
abs(value)
extension Int {
var absoluteValue:Int {
return abs(self)
}
}
value.abs
Update: Wie andere gesagt haben, können Sie auch auf der Unterscheidungs der Verwendung von abs
lösen, indem sie ausdrücklich die Funktion innerhalb des Swift
Rahmen aufrufen. Dies sollte genauso gut funktionieren wie die obige Lösung.
let value = -13
abs(value)
extension Int {
var abs:Int {
return Swift.abs(self)
}
}
value.abs
Obwohl, persönlich, würde ich immer noch meine neue Funktion absoluteValue
wie im ersten Beispiel umbenennen, damit ist klar, dass Sie die Swift.abs()
nicht anrufen, wenn Sie Ihre abs
Variable verwenden.
Aha! Danke beiden. Ich verstehe es jetzt. Die erste Person, die ihre Antwort editiert, um zu zeigen, dass ich die freie Funktion als 'Swift.abs (self)' definieren kann, bekommt das 'accept': D –
Abgesehen davon hasse ich implizites Selbst. –