如何从不可变的非类值中获取Swift UnsafePointer?

Ran*_*Dev 5 swift

我希望能够创建一个UnsafePointerfrom immutable值.

我试图做的最简单的再现如下:

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

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

And*_*Ley 3

根据Joe Groff 在 [swift-evolution] 邮件列表中的消息,在将指针传递给另一个函数时,您可以简单地将变量包装在数组中。此方法使用目标值的副本创建一个临时数组,甚至可以在Swift 2中使用。

let number : Int = 42
my_c_function([number])
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)