J'utilise l'extension suivante pour UIBezierPath:utilisation UnsafeMutablePointer à Swift 3
extension UIBezierPath {
var elements: [PathElement] {
var pathElements = [PathElement]()
withUnsafeMutablePointer(&pathElements) { elementsPointer in
CGPathApply(CGPath, elementsPointer) { (userInfo, nextElementPointer) in
let nextElement = PathElement(element: nextElementPointer.memory)
let elementsPointer = UnsafeMutablePointer<[PathElement]>(userInfo)
elementsPointer.memory.append(nextElement)
}
}
return pathElements
}
}
Ceci est du site:
Cependant, cela rompt avec Swift 3 pour la ligne suivante:
let elementsPointer = UnsafeMutablePointer<[PathElement]>(userInfo)
erreur suivant apparaît:
Cannot invade initializer for type 'UnsafeMutablePointer<[PathElement]>' with an argument list of type '(UnsafeMutableRawPointer?)'
Je comprends que cela est lié au changement de Swift 3: UnsafeRawPointerMigration
Cependant, je ne suis pas tout à fait sûr la La meilleure façon de porter ceci à Swift 3. Seriez-vous capable de fournir de l'aide à cet égard avec le code mis à jour pour l'extension ci-dessus?
Swift 4, la fermeture de fin qui commence par 'elementsPointer' ne compilera pas; l'erreur est "Impossible d'inférer le type de retour de fermeture complexe, ajouter un type explicite pour désamorcer". Xcode suggère d'ajouter cette annotation: 'elementsPointer -> @lvalue [Path Element]' mais en prenant cette suggestion, il y a plus d'erreurs. Des indices? –