Swift 2: Ausdruckmuster vom Typ 'Bool' kann nicht mit Werten vom Typ 'Int' übereinstimmen

7

Ich mache dieses Problem set "FizzBuzz", und meine switch-Anweisung gibt mir einige Probleme, hier ist mein Code:

%Vor%

Wenn Sie mir Hinweise / Hinweise geben könnten, anstatt mir den richtigen Code zu geben, wäre das eine Steigerung: D Ich würde es lieber selbst lösen, aber ein paar Hinweise könnten mich aus diesem Loch bringen.

    
user3724487 28.11.2015, 19:32
quelle

4 Antworten

9

Versuchen Sie es mit "case let where":

%Vor%     
Leo Dabus 28.11.2015, 19:43
quelle
8

Nur zwei Dinge sind falsch:

(1) Ihre Fälle sind boolesche Ausdrücke, daher möchten Sie sie mit true vergleichen, nicht mit n ;

(2) Sie benötigen einen Standardfall. Also:

%Vor%     
matt 28.11.2015 19:49
quelle
1

Ich weiß sein wenig spät für diese Antwort. Ich aktualisiere die Antwort von @Leo Dabus mit einem anderen Ansatz, der auf Xcode 7.3.1 und Swift 2.2 geschrieben und getestet wurde.

%Vor%

Danke, hoffe das hat geholfen.

    
Tuhin 16.07.2016 10:33
quelle
0

Ein bisschen spät, aber nur um die verschiedenen Antworten hinzuzufügen. Ich glaube, die elegante Lösung, die jetzt verwendet wird, ist diese:

%Vor%

Swift kann Tupel einschalten (sorta-Strukturen, aber im Handumdrehen ohne Definition irgendwo anders im Code erstellt). Dann können Sie in den Fallbeschriftungen nach mehreren Werten gleichzeitig suchen, was ideal für FizzBuzz ist!

Um es ein wenig zu brechen, diesen Teil

%Vor%

erzeugt ein Tupel mit zwei booleschen Werten. Dann ein Case-Label wie folgt

%Vor%

überprüft, ob beide Werte (im Wesentlichen n%3==0 und n%5==0 ) wahr sind und gibt "FizzBuzz"

aus

Das macht es sehr leicht erweiterbar. Sie können dem switch-Argument eine dritte Definition und Ihren Fällen eine dritte wahr / falsch hinzufügen, und Ihr FizzBuzz kann ein FizzBuzzJazz werden. Sie können die Werte im Tupel auch benennen, indem Sie einfach Beschriftungen wie

hinzufügen %Vor%

macht den Code in einigen Fällen besser lesbar.

    
kevin 29.05.2017 13:07
quelle