Swift 2 - hitTest 函数 - 发现致命错误 nil

Posted

技术标签:

【中文标题】Swift 2 - hitTest 函数 - 发现致命错误 nil【英文标题】:Swift 2 - hitTest function - fatal error found nil 【发布时间】:2016-01-21 11:20:10 【问题描述】:

我在UIScrollView 中有一个底部栏UIView,里面有两个按钮。我正在使用hitTest 功能,以便仅为两个按钮启用user interaction

代码只有在我触摸底部栏时才有效,但是,当我触摸屏幕的任何其他部分时,应用程序会崩溃说:

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

class HelpBarViewClass: UIView 

    @IBOutlet var backPageBtn: UIButton!
    @IBOutlet var nextPageBtn: UIButton!

    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? 

        let subview: UIView = super.hitTest(point, withEvent: event)! // fatal error
        return subview == self.nextPageBtn || subview == self.backPageBtn ? subview :nil

    


为什么会出现这个错误?

更新

感谢下面正确代码的回答:

class HelBarViewClass: UIView 

    @IBOutlet var backPageBtn: UIButton!
    @IBOutlet var nextPageBtn: UIButton!

    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? 

        let subview = super.hitTest(point, withEvent: event)
        return subview == self.nextPageBtn || subview == self.backPageBtn ? subview : nil

    


【问题讨论】:

【参考方案1】:

似乎很明显:super.hitTest 返回了nil,但你强制解开它。不要这样做。

【讨论】:

你的意思是删除! @SNos 没错。您可以比较可选项和非可选项。 我已经尝试过,但我得到“可选类型 UIView? 的值未解包” 删除显式类型:let subview = ... 谢谢,正在工作中。还有5分钟接受答案。

以上是关于Swift 2 - hitTest 函数 - 发现致命错误 nil的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HitTest 获得最前面的层而不是最深层

iOS之hitTest

iOS之hitTest

hitTest练习

关于UIView的hitTest:withEvent:方法的理解

SceneKit 中声明的 func hitTest 导致 Playground 崩溃