我很快就得到了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
}
}