Comment puis-je composer avec l'opération entre Int et CGFloat?
En Objective-C, je peux faire l'opération suivante:
Code Objective-C:
CGFloat width = CGRectGetWidth(mView.bounds);
CGFloat total = width*[myArray count];
mais dans Swift, il déclenche une erreur:
Ne pouvait pas trouver une surcharge pour les '*' qui accepte les arguments fournis
Comment puis-je éviter cette situation de façon élégante?
S'il vous plaît pouvez-vous poster le réel Swift code que vous essayez de l'utiliser?
OriginalL'auteur drinking | 2014-06-07
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, nous allons créer des données de démonstration
Maintenant, tout le reste fonctionne presque de la même manière que dans l'Obj-C
ou tout simplement
et total:
Noter que nous avons pour ajouter un
CGFloat
de voter pourarray.count
. Obj-C serait implicitement exprimésNSUInteger
àCGFloat
mais Swift n'a pas de conversions implicites, de sorte que nous avons à ajouter une explicite.OriginalL'auteur Sulthan
Rapide vous ne pouvez pas multiplier deux nombres de types différents (NSNumber, Int, Double, etc.) directement. La largeur d'un CGRect est de type à virgule flottante et le tableau de comptage est de type entier. Voici un exemple de travail:
À l'aide de
NSNumber
pour stocker unCGFloat
me fait penser que vous ne comprenez pas vraiment ce qui se passe là.La bonne réponse à la question initiale.
OriginalL'auteur Dash
Swift ne permettent pas d'opérations entre deux nombres de types différents. Par conséquent, avant de multiplier vos
array.count
(Int
) par la largeur de votre (CGFloat
), vous aurez à le jeter auxCGFloat
.Heureusement, Swift fournit un simple
CGFloat
initialiseur appeléinit(Int)
qui crée une nouvelleCGFloat
à partir d'unInt
. Cette initialisation est la suivante déclaration:L'aire de Jeux de code ci-dessous montre comment effectuer votre calcul avec la Swift 2 à l'aide de
CGFloat
initialiseur:OriginalL'auteur Imanou Petit