繁体   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