2017-06-20 1 views
1

Le code ci-dessous donne une erreur pour chaque valeur à côté de "Case" "Motif d'expression de type Int ne peut pas correspondre aux valeurs de type (int) -> Int ". Je ne suis pas vraiment sûr de savoir comment donner ça. Je pense que je dois changer l'Int à un autre type. J'ai essayé une option mais pas de chance d'effacer l'erreur. La valeur transmise au taux de comparaison variable est une valeur double.Le modèle d'expression de type Int ne peut pas correspondre aux valeurs de type (int) -> Int

 var comparisonRate: Double = 0 
     switch IRDComparisonTerm { 
     case 12: 
      comparisonRate = oneYear 

     case 24: 
      comparisonRate = twoYear 
     case 36: 
      comparisonRate = threeYear 
     case 48: 
      comparisonRate = fourYear 
     case 60: 
      comparisonRate = fiveYear 

     default: 
      comparisonRate = 0 

     } 
+0

Peut-être que IRDComparionTerm est un optionnel? Essayez d'utiliser IRDComparisonTerm! au lieu. – Pochi

+0

@Pochi Votre première réaction à la manipulation et facultatif ne devrait pas ** ** forcer le déballage. – Alexander

Répondre

0

De même que l'erreur indique, IRDComparisonTerm est une fonction qui prend un paramètre Int et renvoie un paramètre Int ((Int) -> Int).

Vous avez oublié d'appeler la fonction.

0

Je l'ai eu pour travailler. Quelques modifications Je me suis rendu compte que je passais la mauvaise valeur à travers l'instruction switch. Merci pour les réponses.

switch comparisonTerm { 
     case 12: 
     comparisonRate = oneYear 

     case 24: 
      comparisonRate = twoYear 

     case 36: 
      comparisonRate = threeYear 
     case 48: 
      comparisonRate = fourYear 
     case 60: 
      comparisonRate = fiveYear 

     default: 
      comparisonRate = 0 

     } 

     print(comparisonRate) 
+0

Cela ressemble à une façon inutilement compliquée de simplement diviser par 12. – Alexander

+0

Il y a trois fonctions qu'il faut pour arriver à la comparaisonTerm. 1. Déterminer la date d'échéance. Calculez le nombre de mois à partir d'aujourd'hui jusqu'à l'échéance. 3. utiliser une instruction switch pour déterminer quel terme de comparaison utiliser en fonction du nombre de mois jusqu'à l'échéance. L'étape finale, sélectionnez le taux basé sur le terme de comparaison. –

+0

Oh, je pensais que vous étiez en train d'assigner 'comparisonTerm', pas de taux. D'ailleurs, l'analyseur statique peut prouver que 'comparisonRate' est assigné à' chaque 'cas' de l'instruction' switch', donc vous n'avez pas besoin de fournir une valeur initiale. Vous pouvez faire de 'comparisonRate' une constante' let' et supprimer l'affectation initiale de '0'. – Alexander