加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:55:37 所属栏目:百科 来源:网络整理
导读:我希望能够从不可变值创建UnsafePointer. 我试图做的最简单的再现如下: let number : Int = 42;var pointer = UnsafePointerInt(number); ^ | Could not make `inout Int` from immutable value. 由于Int不符合AnyObject,我不能使用unsafeAddressOf(). 解决
我希望能够从不可变值创建UnsafePointer.

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

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

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

解决方法

根据 message in the [swift-evolution] mailing list by Joe Groff,您可以在将指针传递给另一个函数时将变量简单地包装在一个数组中.此方法创建一个带有目标值副本的临时数组,甚至可以在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读