didSet导致EXC_BAD_ACCESS

时间:2016-10-30 19:46:13

标签: swift exc-bad-access

如果我使用它:

fileprivate var _saved = false
    open var lat = 0.0 {
        didSet {
            _saved = false
        }
   }

导致EXC_BAD_ACCESS

代表

moobj.lat = 0.0

但简单的open var lat = 0.0看起来不错。没有错误。 为什么呢?

2 个答案:

答案 0 :(得分:1)

我认为答案就在这里:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html

特别注意标题为"访问级别的指导原则"其中包含以下两点:

我。公共变量不能定义为具有内部,文件私有或私有类型,因为在使用公共变量的任何地方都可能无法使用该类型。

II。函数不能具有比其参数类型和返回类型更高的访问级别,因为该函数可用于其组成类型不可用于周围代码的情况。

我认为你的代码违反了第二个附带条件,因为didSet观察者函数的参数是打开的,但函数本身正在尝试更改fileprivate变量。

答案 1 :(得分:0)

经过几个小时和几次重建/重启后,问题消失了。不知道原因。 Imo,XCode的bug。