如何获取 Swift 对象的 AutoreleasingUnsafeMutablePointer
How to get the AutoreleasingUnsafeMutablePointer of a Swift Object
我目前是 owncloud iOS library 我的 Swift 应用的上传任务。
它是用 Objective-C 编写的,需要我将 AutoreleasingUnsafeMutablePointer<NSProgress?>
传递给 upload method。
假设我像这样创建了一个新对象
let progress: NSProgress? = NSProgress()
如何在 Swift 中获取此对象的 AutoreleasingUnsafeMutablePointer<NSProgress?>
?
我试过以下方法:
var progress: NSProgress? = NSProgress()
let unsafeAutoreleasingProgressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
但我得到一个
EXC_BAD_ACCESS (code=1, address = 0x15942320)
执行代码时。我想保留对进度对象的引用,因为我想添加一个观察者回调,以百分比形式告诉我上传进度(如示例 link 中所示)。
AutoreleasingUnsafeMutablePointer
只是一个结构。您所要做的就是创建指针,然后将值赋给它的 memory
属性.
var pointer = AutoreleasingUnsafeMutablePointer<NSProgress>.init()
pointer.memory = progress!
实际上有 2 个问题。
我们可以像这样创建一个 AutoreleasingUnsafeMutablePointer<NSProgress?>
对象:
let progress = NSProgress()
let progressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
重要的是要注意你必须保持指针在周围。如果在方法中创建指针,一旦我们退出方法范围,对它的引用就会丢失。这导致
EXC_BAD_ACCESS
异常。所以你的实现可能是这样的:
class MyClass: NSObject {
dynamic var progress: NSProgress = NSProgress()
var progressPointer: AutoreleasingUnsafeMutablePointer<NSProgress?> = nil
override init(){
//...
//init non optional variables here
super.init()
progressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
}
}
在我的例子中,我做了 Key-Value Observing,因为我使用的是第三方 Objective C 依赖项。注意你要使用KVO观察的对象前面要加上dynamic
关键字
如果你仍然得到
EXC_BAD_ACCESS
异常,使用单例模式。
我目前是 owncloud iOS library 我的 Swift 应用的上传任务。
它是用 Objective-C 编写的,需要我将 AutoreleasingUnsafeMutablePointer<NSProgress?>
传递给 upload method。
假设我像这样创建了一个新对象
let progress: NSProgress? = NSProgress()
如何在 Swift 中获取此对象的 AutoreleasingUnsafeMutablePointer<NSProgress?>
?
我试过以下方法:
var progress: NSProgress? = NSProgress()
let unsafeAutoreleasingProgressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
但我得到一个
EXC_BAD_ACCESS (code=1, address = 0x15942320)
执行代码时。我想保留对进度对象的引用,因为我想添加一个观察者回调,以百分比形式告诉我上传进度(如示例 link 中所示)。
AutoreleasingUnsafeMutablePointer
只是一个结构。您所要做的就是创建指针,然后将值赋给它的 memory
属性.
var pointer = AutoreleasingUnsafeMutablePointer<NSProgress>.init()
pointer.memory = progress!
实际上有 2 个问题。
我们可以像这样创建一个 AutoreleasingUnsafeMutablePointer<NSProgress?>
对象:
let progress = NSProgress()
let progressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
重要的是要注意你必须保持指针在周围。如果在方法中创建指针,一旦我们退出方法范围,对它的引用就会丢失。这导致
EXC_BAD_ACCESS
异常。所以你的实现可能是这样的:
class MyClass: NSObject {
dynamic var progress: NSProgress = NSProgress()
var progressPointer: AutoreleasingUnsafeMutablePointer<NSProgress?> = nil
override init(){
//...
//init non optional variables here
super.init()
progressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
}
}
在我的例子中,我做了 Key-Value Observing,因为我使用的是第三方 Objective C 依赖项。注意你要使用KVO观察的对象前面要加上dynamic
关键字
如果你仍然得到
EXC_BAD_ACCESS
异常,使用单例模式。