Is there any plans to isolate alignmentGuide's computeValue closure?

Hello. I am developing an application using Swift 6 and SwiftUI.

I have custom implemented a BottomSheet that animates from bottom to top, and I attempted to achieve this animation by changing the alignmentGuide like this.

ZStack(alignment: .bottom) {
dimView
.opacity(isVisible ? 1 : 0)
.transaction { transaction in
transaction.animation = .easeInOut(duration: 0.35)
}
bottomSheetView
.alignmentGuide(VerticalAlignment.bottom) { dimension in
// compile error occur because isVisible property is state of MainActor isolated View!
isVisible ? dimension[.bottom] : dimension[.top]
}
}

There were no issues in Swift 5, but now I am encountering compile errors because the computeValue closure of the alignmentGuide is not isolated to the MainActor, preventing me from calling view state values or functions.

So I am curious if there are any plans to isolate this closure to the MainActor. From my observation, this closure is always called on the main thread.

Thank you.

Answered by Fat Xu in 818960022
ZStack(alignment: .bottom) {
.....
let isVisible = isVisible // Remove isolation
bottomSheetView
.alignmentGuide(VerticalAlignment.bottom) { dimension in
isVisible ? dimension[.bottom] : dimension[.top]
}
}

or

.alignmentGuide(VerticalAlignment.bottom) { dimension in
_isVisible.wrappedValue ? dimension[.bottom] : dimension[.top]
}
Accepted Answer
ZStack(alignment: .bottom) {
.....
let isVisible = isVisible // Remove isolation
bottomSheetView
.alignmentGuide(VerticalAlignment.bottom) { dimension in
isVisible ? dimension[.bottom] : dimension[.top]
}
}

or

.alignmentGuide(VerticalAlignment.bottom) { dimension in
_isVisible.wrappedValue ? dimension[.bottom] : dimension[.top]
}
Is there any plans to isolate alignmentGuide's computeValue closure?
 
 
Q