2016-07-21 3 views
2

ich die folgende Funktion definierte den minimalen Schlüsselwert in einem Wörterbuch zu finden:„Missing return“ in Funktion, die den Schlüssel mit Min-/Max-Wert im Wörterbuch findet

func keyMinValue(dictionary: [String: Double])-> String{ 

    for (key,value) in dict{ 
     if value == dict.values.minElement(){ 
      return key 
     } 
    } 
} 

Ein Fehler zeigt an, dass mein Code :

in einer Funktion fehlt Rückkehr erwartet 'String' zurückzukehren

ich in Python-Code diese Logik verwendet haben, bevor und es funktioniert. Ich bin neu in Swift, also vielleicht fehlt mir hier etwas. Funktioniert die Funktion nicht bei der ersten Rückkehr?

+0

Wenn der Schlüssel nicht gefunden wird, gibt die Methode nichts zurück. Das ist wahrscheinlich Ihr Fall. – ragingasiancoder

+0

Mögliches Duplikat von [Wie finden Sie einen Höchstwert in einem Swift-Wörterbuch?] (Https://stackoverflow.com/questions/35232922/how-do-you-find-a-maximum-value-in -a-swift-dictionary) – Narsail

Antwort

3

Sie sind in der Nähe. Das Problem ist, wenn es keine Elemente im Wörterbuch gibt, was zurückgegeben wird? Sie können den Rückgabewert Optional in Betracht ziehen und nil zurückgeben, wenn kein Element gefunden wird.

func keyMinValue(dict: [String: Double]) -> String? { 

    for (key, value) in dict { 
     if value == dict.values.minElement() { 
      return key 
     } 
    } 

    return nil 
} 
+1

Es wäre also sicher anzunehmen, dass man in Swift immer den "nil" -Fall beim Aufrufen von Funktionen, Enums, Strukturen, Klassen usw. berücksichtigen sollte. – RiceFam

+0

Ja, definitiv. Das Schöne an Swift ist, dass es dir dabei hilft. In vielen anderen Sprachen ist es sehr einfach, unabsichtlich zu versuchen, einen "Null" -Wert zu verwenden, um etwas zu tun, das einen Absturz verursachen könnte. 'Optionally's lassen Sie explizit wissen, dass es möglich ist, dass der Wert nicht da ist, damit Sie es richtig behandeln können. Wenn etwas nicht "Optional" ist, ist es zur Kompilierzeit ziemlich garantiert, dass es funktioniert. Weitere Details finden Sie hier: http://stackoverflow.com/documentation/swift/247/optional/5984/overview-why-optional – dbburgess

Verwandte Themen