【问题标题】:Swift 3 - sending the pointer of an optionally bound variable - iOSSwift 3 - 发送可选绑定变量的指针 - iOS
【发布时间】:2017-02-27 17:12:09
【问题描述】:

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

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

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

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

函数签名特化 ) -> () 到@callee_owned (@unowned Swift.UnsafeBufferPointer) -> (@out ()),参数类型:[@callee_owned (@unowned Swift.UnsafeBufferPointer) -> ()]> 的泛型 专业化 Swift.StaticString.withUTF8Buffer ((Swift.UnsafeBufferPointer) -> A) -> A

编辑: getSectionChanges()的定义:

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

请帮忙?!

【问题讨论】:

  • 你能重写你的getSectionChanges 让它只返回带有更改数组的元组,而不是使用inout 参数吗?相信我,它会在未来为您节省大量时间和精力。
  • getSectionChanges()从何而来,又是如何定义的?
  • @user28434 这是一个很好的建议,我没想到。但是有没有办法我可以发送一个可选变量的指针?! GAH 我讨厌这些升级。
  • @MartinR,编辑了问题以包含函数定义。
  • @KoushikKumar,用于定义 getSectionChanges 的编辑:将 AutoreleasingUnsafeMutablePointer&lt;NSArray&gt;? 更改为 inout NSArray?。将来最好使用具有正确定义的内容类型的 swift 数组。

标签: ios swift nsarray swift3 xcode8


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 问题是,sectionChanges 和 rowChanges 有可能被分配一个 nil 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    相关资源
    最近更新 更多