Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI-如何使用异步操作更改同步值_Swift_Swiftui - Fatal编程技术网

SwiftUI-如何使用异步操作更改同步值

SwiftUI-如何使用异步操作更改同步值,swift,swiftui,Swift,Swiftui,我有一个挂锁的图像,只有在特定的inapp购买未在SwiftUI上购买时才能显示 差不多 Image(systemName: "lock.circle.fill") .renderingMode(.template) .foregroundColor(.white) .font(symbolFont) .opacity(wasPurchased(item: item)) func wasPurchased(item: item) ->

我有一个挂锁的图像,只有在特定的inapp购买未在SwiftUI上购买时才能显示

差不多

  Image(systemName: "lock.circle.fill")
    .renderingMode(.template)
    .foregroundColor(.white)
    .font(symbolFont)
    .opacity(wasPurchased(item: item))
func wasPurchased(item: item) -> Bool {
    return check(item:item) ? true : false
}
但据我所知,
是购买的
必须是一个同步函数,对吗

差不多

  Image(systemName: "lock.circle.fill")
    .renderingMode(.template)
    .foregroundColor(.white)
    .font(symbolFont)
    .opacity(wasPurchased(item: item))
func wasPurchased(item: item) -> Bool {
    return check(item:item) ? true : false
}
但是,这样的检查通常是通过网络异步进行的,正如我看到的,函数必须有一个签名,如

func wasPurchased(item: item, runOnFinishChecking:(Bool)->()) {
我不知道如何使用异步的东西来控制这样的元素的不透明度


如何做到这一点?

您可以为该模型(或视图模型中的模型)使用状态属性并更新该属性

下面是一个基于状态的演示:

@State private var locked = true

...

  Image(systemName: "lock.circle.fill")
    .renderingMode(.template)
    .foregroundColor(.white)
    .font(symbolFont)
    .opacity(self.locked ? 1 : 0)

    .onAppear {
       self.wasPurchased(self.item) { purchased in
          DispatchQueue.main.async {
             self.locked = !purchased
          }
       }
    }
...

很好,这解决了一个问题,但我记得还有一个问题,图像位于列表中的单元格内。对不起,我对SwiftUI很陌生。您需要我创建另一个问题吗?一个问题-一个答案;)。。。