Swift Eureka SplitRow 值更新
Swift Eureka SplitRow values updating
每次 VC 出现在屏幕上时,我都试图更新我的 SplitRow 中每个 LabelRow 的值(它必须是那样的)。我试过在两个 LabelRows 上使用 .cellUpdate,但它只是崩溃了。当我仅在其中一个 LabelRows 上使用 .updateCell 时,它会很好地更新该行的值。有没有办法同时更新它们?我尝试在 SplitRow 上使用 .updateCell 但后来我无法更新值(它们是只读的?)。
失败的代码部分:
<<< SplitRow<LabelRow, LabelRow>() {
[=11=].rowLeftPercentage = 0.5
[=11=].rowLeft = LabelRow() {
[=11=].title = "Expected"
[=11=].tag = "temp_expected"
} //tried callbacks here
[=11=].rowRight = LabelRow() {
[=11=].title = "Last"
[=11=].tag = "temp_last"
} //tried callbacks
} //also tried there but cant update values
编辑:这是我试过的方法
<<< SplitRow<LabelRow, LabelRow>() {
[=12=].rowLeftPercentage = 0.5
[=12=].rowLeft = LabelRow() {
[=12=].title = "Expected"
[=12=].tag = "temp_expected"
}.cellUpdate {
.value = "value1" //here would go value from other object, doesn't work either
}
[=12=].rowRight = LabelRow() {
[=12=].title = "Last"
[=12=].tag = "temp_last"
} .cellUpdate {
.value = "value2" // same as above
}
}
还有一个
<<< SplitRow<LabelRow, LabelRow>() {
[=13=].rowLeftPercentage = 0.5
[=13=].rowLeft = LabelRow() {
[=13=].title = "Expected"
[=13=].tag = "temp_expected"
}
[=13=].rowRight = LabelRow() {
[=13=].title = "Last"
[=13=].tag = "temp_last"
}
}.cellUpdate {
.value?.left = "value1" //does nothing
.value?.right = "value2" //does nothing
}
您的代码因堆栈溢出而崩溃。 .value
的setter调用了cell.update()
,又调用了cellUpdate
,形成了死循环:(
我发现这个肮脏的把戏很管用:
在 DispatchQueue.main.async
调用中换行 row.value = ...
行:
SplitRow<LabelRow, LabelRow>() {
[=10=].rowLeftPercentage = 0.5
[=10=].rowLeft = LabelRow() {
[=10=].title = "A"
[=10=].tag = "temp_expected"
}.cellUpdate { cell, row in
DispatchQueue.main.async {
row.value = ...
}
}
[=10=].rowRight = LabelRow() {
[=10=].title = "B"
[=10=].tag = "temp_last"
} .cellUpdate { cell, row in
DispatchQueue.main.async {
row.value = ...
}
}
}
但实际上,您应该找到另一个地方来设置行的值。听起来值会随着时间而变化,而您希望始终显示最新值。尝试使用 RxSwift 的响应式方法。您将订阅 Observable<String>
,并将收到的每个值设置为该行的值。
每次 VC 出现在屏幕上时,我都试图更新我的 SplitRow 中每个 LabelRow 的值(它必须是那样的)。我试过在两个 LabelRows 上使用 .cellUpdate,但它只是崩溃了。当我仅在其中一个 LabelRows 上使用 .updateCell 时,它会很好地更新该行的值。有没有办法同时更新它们?我尝试在 SplitRow 上使用 .updateCell 但后来我无法更新值(它们是只读的?)。 失败的代码部分:
<<< SplitRow<LabelRow, LabelRow>() {
[=11=].rowLeftPercentage = 0.5
[=11=].rowLeft = LabelRow() {
[=11=].title = "Expected"
[=11=].tag = "temp_expected"
} //tried callbacks here
[=11=].rowRight = LabelRow() {
[=11=].title = "Last"
[=11=].tag = "temp_last"
} //tried callbacks
} //also tried there but cant update values
编辑:这是我试过的方法
<<< SplitRow<LabelRow, LabelRow>() {
[=12=].rowLeftPercentage = 0.5
[=12=].rowLeft = LabelRow() {
[=12=].title = "Expected"
[=12=].tag = "temp_expected"
}.cellUpdate {
.value = "value1" //here would go value from other object, doesn't work either
}
[=12=].rowRight = LabelRow() {
[=12=].title = "Last"
[=12=].tag = "temp_last"
} .cellUpdate {
.value = "value2" // same as above
}
}
还有一个
<<< SplitRow<LabelRow, LabelRow>() {
[=13=].rowLeftPercentage = 0.5
[=13=].rowLeft = LabelRow() {
[=13=].title = "Expected"
[=13=].tag = "temp_expected"
}
[=13=].rowRight = LabelRow() {
[=13=].title = "Last"
[=13=].tag = "temp_last"
}
}.cellUpdate {
.value?.left = "value1" //does nothing
.value?.right = "value2" //does nothing
}
您的代码因堆栈溢出而崩溃。 .value
的setter调用了cell.update()
,又调用了cellUpdate
,形成了死循环:(
我发现这个肮脏的把戏很管用:
在 DispatchQueue.main.async
调用中换行 row.value = ...
行:
SplitRow<LabelRow, LabelRow>() {
[=10=].rowLeftPercentage = 0.5
[=10=].rowLeft = LabelRow() {
[=10=].title = "A"
[=10=].tag = "temp_expected"
}.cellUpdate { cell, row in
DispatchQueue.main.async {
row.value = ...
}
}
[=10=].rowRight = LabelRow() {
[=10=].title = "B"
[=10=].tag = "temp_last"
} .cellUpdate { cell, row in
DispatchQueue.main.async {
row.value = ...
}
}
}
但实际上,您应该找到另一个地方来设置行的值。听起来值会随着时间而变化,而您希望始终显示最新值。尝试使用 RxSwift 的响应式方法。您将订阅 Observable<String>
,并将收到的每个值设置为该行的值。