'self' captured by a clo

2018-03-17  本文已影响496人  小白猿

场景

Swift,在一个模型中有两个布尔的属性,比如a和b,在init方法中用到了a && b 或者 a || b时会报以下错误
'self' captured by a closure before all members were initialized
百度谷歌都没有一个太准确的答案,后来抽象了一个简单的例子如下

class ModelTest: NSObject {
    var a: Bool = false
    var b: Bool = true
    
    override init() {
        if a && b {
            
        }
    }
}

探索

答疑

在init方法中调用super.init()之前,要保证这个类或者说这个NSObject的子类的属性要全部初始化,所以刚才的简单的例子有两种修改方式,在具体的开发中根据具体的开发场景进行选择

# init之前就赋初值
class ModelTest: NSObject {
    var a: Bool = false
    var b: Bool = true
    
    override init() {
        super.init()
        if a && b {
        }
    }
}

# 在init方法内,在调用 super.init() 之前调用
class ModelTest: NSObject {
    var a: Bool
    var b: Bool 
    
    override init() {
        a = true
        b = false
        super.init()
        if a && b {
        }
    }
}

# 可选值
class ModelTest: NSObject {
    var a: Bool?
    var b: Bool?
    
    override init() {
        super.init()
        if a! && b! {
            
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读