Ich glaube nicht, dass dies leicht möglich ist. Genauso, wie Sie C-Style-Arrays für Parameter, die mit NSArray
arbeiten, nicht verwenden können.
Alle C-Arrays in Swift werden durch eine UnsafePointer
, z.B. UnsafePointer<Float>
. Swift weiß nicht wirklich, dass die Daten ein Array sind. Wenn Sie sie in ein Swift-Array konvertieren möchten, müssen Sie ein neues Objekt erstellen und die Elemente nacheinander kopieren.
let array: Array<Float> = [10.0, 50.0, 40.0]
// I am not sure if alloc(array.count) or alloc(array.count * sizeof(Float))
var cArray: UnsafePointer<Float> = UnsafePointer<Float>.alloc(array.count)
cArray.initializeFrom(array)
cArray.dealloc(array.count)
bearbeiten
fand gerade eine bessere Lösung, das ist eigentlich das Kopieren vermeiden könnte.
let array: Array<Float> = [10.0, 50.0, 40.0]
// .withUnsafePointerToElements in Swift 2.x
array.withUnsafeBufferPointer() { (cArray: UnsafePointer<Float>) ->() in
// do something with the C array
}
Sicherlich das Array mit unsicheren Zeigern m zu erreichen, ust kopieren Sie den Inhalt, wie es nicht weiß, wie lange es zugeordnet wird? – jhabbott
@jhabbott Deshalb ist es "unsicher" :). Abhängig von der internen Repräsentation von Array <> muss es möglicherweise eine Kopie in einen zusammenhängenden Speicherbereich durchführen, wenn es nicht bereits in einem existiert, aber dies ist in der Praxis wahrscheinlich eher unwahrscheinlich/selten. – Ephemera
Sieht aus wie '' '' mitUnsafePointerToElements''' entfernt wurde: https://developer.apple.com/library/mac/releasenotes/General/APIDiffsMacOSX10_10_3/modules/Swift.html – marchinram