Swift 3 - 发送可选绑定变量的指针 - iOS

Swift 3 - sending the pointer of an optionally bound variable - iOS

我目前正在将我的 swift 文件转换为 swift 3,并且存在涉及指针的运行时异常。这是代码:

var sectionChanges:NSArray? = nil
var rowChanges:NSArray? = nil

databaseView.getSectionChanges(&sectionChanges!, rowChanges: &rowChanges!, for: notifications, with: mappings)

致命错误:在展开可选值时意外发现 nil

function signature specialization ) -> () to @callee_owned (@unowned Swift.UnsafeBufferPointer) -> (@out ()), Argument Types : [@callee_owned (@unowned Swift.UnsafeBufferPointer) -> ()]> of generic specialization of Swift.StaticString.withUTF8Buffer ((Swift.UnsafeBufferPointer) -> A) -> A

编辑: getSectionChanges() 的定义:

open func getSectionChanges(_ sectionChangesPtr: AutoreleasingUnsafeMutablePointer<NSArray>?, rowChanges rowChangesPtr: AutoreleasingUnsafeMutablePointer<NSArray>?, for notifications: [NSNotification], with mappings: YapDatabaseViewMappings)

请帮忙?!

作为方法定义暗示:参数AutoreleasingUnsafeMutablePointer?不会接受 nil NSArray 对象的地址。所以你应该使用下面的代码来调用方法:

var sectionChanges = NSArray()
var rowChanges = NSArray()

databaseView.getSectionChanges(&sectionChanges, rowChanges: &rowChanges, for: notifications, with: mappings)

将可选变量初始化为 nil 以外的值似乎有所帮助。我自己回答这个问题,以防对其他人有用。

var sectionChanges:NSArray? = NSArray()
var rowChanges:NSArray? = NSArray()

databaseView.getSectionChanges(&(sectionChanges)!, rowChanges: &(rowChanges)!, for: notifications, with: mappings)