![](/img/trans.png)
[英]In Swift, how to make a descendant of String? I get error “Inheritance from non-protocol, non-class type 'String'” when trying to do that
[英]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.