簡體   English   中英

如何從不可變的非類值中獲取Swift UnsafePointer?

[英]How do I get a Swift UnsafePointer from an immutable non-class value?

我希望能夠UnsafePointer值創建UnsafePointer

我試圖做的最簡單的再現如下:

let number : Int = 42;
var pointer = UnsafePointer<Int>(&number);
                                 ^
                                 | Could not make `inout Int` from immutable
                                   value.

由於Int不符合AnyObject ,我不能使用unsafeAddressOf()

根據Joe Groff在[swift-evolution]郵件列表中消息 ,您可以在將指針傳遞給另一個函數時將變量簡單地包裝在數組中。 此方法創建一個帶有目標值副本的臨時數組,甚至可以在Swift 2中使用

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

Swift 3中 ,您可以直接構造UnsafePointer 但是,您必須確保數組的生命周期與UnsafePointer的生命周期相匹配。 否則,可能會覆蓋數組和復制的值。

let number : Int = 42
// Store the "temporary" array in a variable to ensure it is not overwritten.
let array = [number]
var pointer = UnsafePointer(array)

// Perform operations using the pointer.

您可以使用withUnsafePointer。

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

或者,您可以使用“$ 0”速記參數來訪問塊內的指針。

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

以下是使用UnsafePointer的一些好注意事項: https//developer.apple.com/reference/swift/unsafepointer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM