12
votes

Comment alloc / distributeurs de distribution / distributeurs de distribution à Swift?

avec beta 4, j'ai eu ce code qui a fonctionné bien: xxx

maintenant avec bêta5, je reçois l'erreur "'áesafepointer.type' n'a pas de membre nommé" Alloc "" .

Tout ce que j'essaie de faire est de définir la couleur de course du CGContext basé sur un UICOLOR. Comment suis-je censé faire cela maintenant? La fonction "withunsafePointers" est un peu une blague - elle donne des erreurs étranges et ne prend qu'un maximum de trois pointeurs dangereux, alors que j'essaie d'utiliser quatre dans ce cas.


5 commentaires

Essayez Var rouge, vert, bleu, alpha: cgfloat; CGContextsTrgstrokecolor (contexte, & rouge, et vert, et bleu, 1)


Unfeapointer est renommé INSFAIMUTABLOPERTER . Mais vous avez vraiment besoin d'éviter d'utiliser.


Toute la langue rapide est conçue de manière à ne pas avoir à revenir à l'utilisation de pointeurs (dangereux). Le but principal de SWIFT est d'être un langage sûr et fiable.


@Byran Chen - merci, vous avez la bonne réponse. À Bryan Chen et Oscar Swanros, j'aimerais aimer, aimer, aimer d'arrêter d'utiliser des pointeurs dangereux, mais le problème est que je suis obligé de le faire. Pouvez-vous me montrer n'importe quel moyen de définir la couleur de course CGContext basée sur un UICOLOR sans utiliser des pointeurs dangereux? Je serais extatique si tu pouvais.


@ user1021430 - Que diriez-vous de cela? Uigraphiquebeginimagecontext (CGSIZE (largeur: 100, hauteur: 100)); laisser context = uigraphicsgetcurrentContext (); laisser couleur = uicolor.redcolor (); Composants var: [cgfloat] = [0, 0, 0, 0]; couleur.Gutée (& composants [0], vert: & composants [1], bleu: & composants [2], alpha: & composants [3]); CGContextststrokecolor (contexte, composants)


4 Réponses :


26
votes

Ceci fonctionne, Swift est suffisamment intelligent pour savoir quoi faire avec l'opérateur & : xxx

Si vous voulez vraiment faire l'alloc vous-même, utilisez votre Saveur préférée et construisez le pointeur comme celui-ci: xxx


3 commentaires

Incroyable!!! Donc, je suppose que la mise en place de "&" avant que des arguments ne les convertit automatiquement de SWIFT CGFLOAT vers UNSAFEMUTABLECONTER ? Je souhaite que cela ait été documenté quelque part par Apple. Parce qu'aucune de la documentation n'indique rien près de cela. En outre, une chose - Swift est trop muette pour compiler la ligne "Var R, G, B, A: CGFLOAT = 0,0". Il donne l'erreur "Type Annotation manquant dans le modèle". Donc, les variables doivent être déclarées chacune de leur propre ligne.


Merci, j'ai mis à jour ma réponse (vous pouvez aussi faire quelque chose comme var: [cgfloat] = [0,0,0,0] et référencez plutôt les éléments de tableau.) Ce truc est couvert dans < a href = "https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/builildingcocoaapps/interactingwithcapis.html" rel = "Nofollow Noreferrer"> Utilisation de Swift avec cacao et objectif-C Sous interagir avec c APIS .


Merci. Ok, je le vois dans la référence maintenant. Je me demande si je manquais simplement cela ou si la référence a été mise à jour depuis que je l'ai lu ...



9
votes

UNSAPOINTER code> n'a plus d'un membre .alloc code>. Utilisez Unfemutablepointer .alloc code> à la place. par exemple. Le videof () code suivant> fonctionne comme initialiseur universel.

func blankof<T>(type:T.Type) -> T {
    var ptr = UnsafeMutablePointer<T>.alloc(sizeof(T))
    var val = ptr.memory
    ptr.destroy()
    return val
}

var red   = blankof(CGFloat)
var green = blankof(CGFloat)
var blue  = blankof(CGFloat)
var alpha = blankof(CGFloat)
color.getRed(&red, green:&green, blue:&blue, alpha:&alpha)
CGContextSetRGBStrokeColor(context, red, green, blue, 1)
// no need to dealloc because they are all structs, not pointers


0 commentaires

1
votes

comme de bêta 5, vous pouvez simplement transmettre vos variables préfixées avec et. Assurez-vous simplement de les initialiser

Plus d'infos sur https://developer.apple. com / swift / blog /? id = 6 p>

Pour utiliser des variables simples, vous pouvez simplement les définir sur une valeur zéro p> xxx pré>

Pour utiliser des tableaux C, vous créez simplement un tableau normal avec les indices que vous attendez P>

var points:[NSPoint] = [NSPoint(), NSPoint(), NSPoint()] //notice how we set empty NSPoints
self.elementAtIndex(index, associatedPoints: &points)
CGPathAddCurveToPoint(path, nil, points[0].x, points[0].y, points[1].x, points[1].y, points[2].x, points[2].y)


0 commentaires

4
votes

Pour répondre à votre question sur la définition de la couleur de course d'un uicolor code>, cela fonctionnera:

CGContextSetStrokeColorWithColor(myUIColor.CGColor);


0 commentaires