簡體   English   中英

如何在 SwiftUI 視圖的這個 custom.if 擴展中包裝#available?

[英]How to wrap #available in this custom .if extension on a SwiftUI View?

我正在使用這個.if擴展,效果很好,應該添加到 SwiftUI,但是在這種情況下檢查#available是行不通的,因為#available may only be used as condition of an 'if', 'guard' or 'while' statement無論如何,我怎樣才能讓它與這個.if一起工作?

    //Does not compile for #available may only be used as condition of an 'if', 'guard' or 'while' statement
   ForEach...
   .if(#available(iOS 15.0, *)) { $0.refreshable {
                        
                    } }

extension View {
  @ViewBuilder
  func `if`<Transform: View>(
    _ condition: Bool,
    transform: (Self) -> Transform
  ) -> some View {
    if condition {
      transform(self)
    } else {
      self
    }
  }
}

我通常只做.if(true)然后檢查閉包內的可用性。 不幸的是,我們無法在if修飾符中檢查可用性。

例子:

struct ContentView: View {
    var body: some View {
        List {
            Text("Hello")
            /* More list items... */
        }
        .if(true) {
            if #available(iOS 15, *) {
                $0.refreshable {
                    //
                }
            } else {
                $0
            }
        }
    }
}

@ViewBuilder添加到transform參數中,以便您可以在if中返回不同的View類型:

extension View {
    @ViewBuilder func `if`<Transform: View>(_ condition: Bool, @ViewBuilder transform: (Self) -> Transform) -> some View {
        if condition {
            transform(self)
        } else {
            self
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM