[英]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.