2015-06-11 20 views

Odpowiedz

2

Według message in the [swift-evolution] mailing list by Joe Groff, można po prostu zawinąć zmiennej w tablicy po przejściu przez wskaźnik do innej funkcji. Ta metoda tworzy tymczasową tablicę z kopią wartości docelowej, a nawet działa w Swift 2.

let number : Int = 42 
my_c_function([number]) 

W Swift 3, można skonstruować UnsafePointer bezpośrednio. Należy jednak upewnić się, że cykl życia macierzy jest zgodny z cyklem życia tablicy UnsafePointer. W przeciwnym razie tablica i skopiowana wartość mogą zostać nadpisane.

+0

Dziękuję, Andreas, zajrzę do tego, jak tylko wrócę do domu !!! –

+0

Nie wydaje się działać Obawiam się ... Jakieś pomysły? https://iswift.org/playground?HluN5e –

+0

Ahh, wydaje się, że jest to kwestia życia obiektu. https://iswift.org/playground?C3hojU –

-1

Możesz użyć withUnsafePointer.

var number : Int = 42 
withUnsafePointer(to: &number) { (pointer: UnsafePointer<Int>) in 
    // use pointer inside this block 
    pointer.pointee 
} 

Alternatywnie można użyć skróconego argumentu "0 USD", aby uzyskać dostęp do wskaźnika w bloku.

var number : Int = 42 
withUnsafePointer(to: &number) { 
    // use pointer inside this block 
    $0.pointee 
} 

Oto kilka dobrych notatek na temat korzystania UnsafePointer: https://developer.apple.com/reference/swift/unsafepointer

+0

Niestety, to nie działa dla niezmiennych wartości. –

+0

Dobrze, ale zakładam, że używa "liczby" dla wartości inout w wywołaniu funkcji. W takim razie, dlaczego miałby chcieć, żeby to było "niech"? Założę się, że przez pomyłkę został zrobiony "niech" zamiast "var". –

Powiązane problemy