Swift 3.0: Compilerfehler beim Aufrufen der globalen Funktion min <T> (T, T) in Array oder Dictionary-Erweiterung
Nach der Konvertierung von Swift 2.2 nach 3.0 myArray
ie Erweiterung @ wird nicht mehr kompiliert, da sie einen Aufruf der globalen Standardbibliotheksfunktion @ enthälmin<T>(T,T)
und zeigt Compilerfehlerextra argument in call
.
Hier ist eine einfache Möglichkeit, den Fehler zu reproduzieren:
extension Array {
func smallestInt(first: Int, second: Int) -> Int {
return min(first, second) // compiler error: "Extra argument in call"
}
}
Ich erhalte den gleichen Fehler, wenn ich einer Erweiterung von @ die gleiche Funktion hinzufüDictionary
, während der exakt gleiche Code in einer Erweiterung anderer Typen (z. B.String
oderAudioBuffer
):
Blick in die Dokumentation vonArray
undDictionary
, Ich finde, dass es Instanzmethoden auf @ giSequence
genanntpublic func min() -> Element?
undpublic func min(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
. Während beideString
undAudioBuffer
habe keine Art vonmin(...)
Funktion.
Ist es möglich, dass dies der Grund ist, warum ich die globale Funktion nicht aufrufen kann? Der Compiler kann nicht zwischen globalem @ unterscheidfunc min<T>(T,T)
undself.min(...)
obwohl sie völlig unterschiedliche Signaturen haben?
Ist das ein Fehler oder eine Funktion? Was mache ich falsch? Wie kann ich @ anrufmin(T,T)
korrekt in einemArray
extension?