J'ai une énumération pour les valeurs marquées (il s'agit d'un projet d'interpréteur de régime de jouet), comme celui-ci:
init?(value:Any) { switch v { case let v as Int: self = .int(v) case let v as Float: self = .float(v) case let v as Bool: self = .bool(v) ... default: return nil } }
3 Réponses :
Le type déduit par défaut pour les constantes de points flottants est double code>, pas
float code>. Il est défini par la bibliothèque standard SWIFT ici: https://developer.apple.com/reference/swift / Floatliteraltype Utilisation du compilateur-connu
Floatliteraltype Code> Typealias. P>
Merci, c'était concis et illuminant!
La documentation de Type Inference dit:
Swift choisit toujours
double code> (plutôt que
float code>) lorsque vous déduisez le Type de nombres à virgule flottante. P> blockQuote>
Si vous souhaitez utiliser
float code>, vous devez jeter explicitement le littéral: p>
xxx pré> p>
Veuillez inclure une explication de Somme pour la raison pour laquelle votre code fonctionne
@ milo526 Le code dit tout clair. Facile à comprendre.
Comme je le comprends maintenant, votre cas de flotteur ne correspondra jamais non plus, tandis que votre double cas l'attrape. Je ne pense pas que votre code rend ce point clair.
@Dietrich Swift choisit toujours le double (plutôt que le flotteur) lorsque vous déduisez le type de nombre de points flottants.
Merci d'avoir clarifié cela, @ William-Hu!
BTW, il semble que vous souhaitiez pouvoir accéder à votre type code> de type code> avec littéraux, vous pouvez donc essayer de vous conformer à votre type à Comme: p> expressibleBy * code> protocoles.
Suggestion cool. J'ai vu cela et, à tort il semble, supposé que je ne pouvais pas être conforme à de nombreux protocoles "expressiblesby_literal" à la fois. Je vais essayer, merci!
En fait, j'aime beaucoup mieux que ce que j'avais fait. J'aimerais que je puisse faire vérifier «votre réponse» pour fournir une alternative plus agréable au chemin que j'étais déjà sur lorsque j'ai rencontré le problème qui a conduit à ma question initiale ».
Où est
v code> défini?
Vous voulez probablement dire la valeur du commutateur code>. Littéral 0.1 est
double code> pas
float code>
Luka, ma mauvaise. Je changeais un peu le code comme je l'ai transcrite dans ma question. Il devrait être lu "init? (V: n'importe quel) ...".
CASE SE SE VOR-INT CODE> était meilleur, la variable associée n'est pas la même que la variable "commutée" et il y a un
= code> manquant dans le
bool code > ligne.
Vadian, merci. Je vais essayer de mieux lire avant de poster ma prochaine question. (Quelqu'un d'autre a fait une édition avec "valeur" au lieu de "V" et je l'ai acceptée.)
Dernier Nitpicking: Les cas d'enum sont censés commencer par une lettre minuscule à Swift 3.
@Dietrich, BTW, pouvez-vous dire, si ce n'est pas secret, quel problème que Enum devrait résoudre?
Pas de secret, juste pour un interpréteur de schéma de jouet (-SH). Dans ma mise en œuvre d'une liste liée, la voiture code> d'une liste est une variable de cette valeur Enum Type. L'autre option que j'ai esquissée portait les types Swift de base (INT, String, etc.) sont conformes à une extension, à un protocole de "valeur" vide, à l'aide de ce protocole comme type de la classe de liste '
voiture code > variable. Je pense que le choix Enum, vous fera le reste du code interprète plus clair, ce qui me permettra de
commutateur code> sur le type d'une variable de niveau de schéma. Un troisième choix serait d'utiliser le type
tout code>, je suppose.