Swift:常量在初始化之前被闭包捕获

时间:2019-01-27 16:38:36

标签: swift struct value-type

我很快就得到了struct的奇怪行为。 我有以下代码并出现错误:

  

常量'self.b'在初始化之前被闭包捕获

struct Test {
    let a = 10
    let b: Int

    init(_ x: Int, y: Int) {
        if x < y && y == a {
            b = x
        } else {
            b = 0
        }
    }
}

但是,如果我使用以下代码,则可以正常编译:

struct Test {
    let a = 10
    let b: Int

    init(_ x: Int, y: Int) {
        if y == a {
            b = x
        } else {
            b = 0
        }
    }
}

甚至此代码也可以正常编译:

struct Test {
    let a = 10
    let b: Int

    init(_ x: Int, y: Int) {
        if x < y {
            if y == a {
                b = x
            } else {
                b = 0
            }
        } else {
            b = 0
        }
    }
}
  

更新:我使用guard语句进行了尝试,并且效果很好

struct Test {
    let a = 10
    let b: Int

    init(_ x: Int, y: Int) {
        guard x < y, y == a else {
            b = 0
            return
        }

        b = x
    }
}

0 个答案:

没有答案