bu kolayca mümkün olduğunu sanmıyorum. Aynı şekilde, NSArray
ile çalışan parametreler için C stili dizileri kullanamazsınız. Swift
Tüm C dizileri, örneğin bir UnsafePointer
, ile temsil edilmektedir UnsafePointer<Float>
. Swift, verilerin bir dizi olduğunu bilmiyor. Bunları bir Swift dizisine dönüştürmek istiyorsanız, yeni bir nesne oluşturacak ve öğeleri tek tek kopyalayacaksınız.
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)
Düzenleme Sadece bu aslında kopyalamayı önlemek olabilir, daha iyi bir çözüm buldum. Beta 5 de
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
}
güvenli olmayan işaretçi m dizi elde etmek için blok
baseAddress
yöntemi kullanmak ne kadar süreyle ayrılacağını bilmediği için içerikleri kopyalayın? – jhabbott@jhabbott İşte bu yüzden "güvensiz" :). Dizinin <> iç sunumuna bağlı olarak <> bir kopyası zaten mevcut değilse, bitişik bir bellek alanına kopyalamak zorunda kalabilir, ancak bu muhtemelen uygulamada/makul olmayan bir olasılıktır. – Ephemera
"withUnsafePointerToElements" işlevi kaldırıldı: "https://developer.apple.com/library/mac/releasenotes/General/APIDiffsMacOSX10_10_3/modules/Swift.html – marchinram