2017-04-15 35 views
0

J'appelle getLineDash d'un UIBeizerPath avec ceci:'carte' produit [T], pas le type de résultat contextuel prévu 'UnsafeMutablePointer <CGFloat>'

path.getLineDash(pattern.map{CGFloat($0)}, ...) 

pattern est un [Float] (Et je dois utiliser [Float], non [CGFloat]) suivant Fast method to cast [Float] to [CGFloat]? le jeter aux [CGFloat], mais il me donne

Cannot convert value of type '[CGFloat]' to expected argument type 'UnsafeMutablePointer<CGFloat>?' 

Weirdly, effectuer

path.setLineDash(pattern.map{CGFloat($0)}, ... 

Ne déclenche pas d'erreur de compilation.

Après this question, j'ai ajouté as UnsafeMutablePointer<CGFloat> mais il me donne toujours l'erreur.

+0

Voir: http://stackoverflow.com/questions/39515173/how-to-use-unsafemutablepointer-in-swift-3 – shallowThought

+0

La méthode '' setLineDash' prend UnsafePointer ', Vous pouvez donc utiliser' map'. (Cependant, ce n'est pas un moyen efficace d'appeler 'map' à chaque invocation de' setLineDash'.) Vous ** devez ** utiliser '[CGFloat]' (ou la région de 'CGFloat's) allouée manuellement pour appeler' getLineDash '. – OOPer

Répondre

0

J'étais un peu stupide. Je n'ai pas entièrement compris UnsafeMutablePointer s.

fondamentalement ils sont inout paramètres, ils ont donc besoin de l'esperluette (&) avant l'appel de fonction. aussi, comme c'est inout, je dois lui passer une variable de [CGFloat].

Ce code a fonctionné:

var pat = pattern.map{CGFloat($0)} 
var cou = count 
var phas = phase.map{CGFloat($0)} 
path.getLineDash(&pat, count: &cou, phase: &phas)