web-dev-qa-db-ja.com

SwiftUIの条件付きプロパティ

条件に基づいてプロパティを追加するにはどうすればよいですか?

以下のコードでエラーが発生しましたCannot assign value of type 'some View' (result of 'Self.overlay(_:alignment:)') to type 'some View' (result of 'Self.onTapGesture(count:perform:)')

import SwiftUI

struct ConditionalProperty: View {
    @State var overlay: Bool
    var body: some View {
        var view = Image(systemName: "photo")
            .resizable()
            .onTapGesture(count: 2, perform: self.tap)
        if self.overlay {
            view = view.overlay(Circle().foregroundColor(Color.red))
        }
        return view
    }

    func tap() {
        // ...
    }
}
3
Ben Keil

Conditional Propertiesを実装するための推奨される方法は以下のとおりです。アニメーションを適用している場合はうまく機能します。
他の方法をいくつか試しましたが、適用したアニメーションに影響します。

保持したfalseの代わりに条件を追加できます。conditionalView(false

以下では、trueに切り替えて、'Hello、World!'が表示されることを確認できます[〜#〜] bold [〜#〜]

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
        .conditionalView(false)
    }
}

extension View {
    func conditionalView(_ value: Bool) -> some View {
        self.modifier(ConditionalModifier(isBold: value))
  }
}

struct ConditionalModifier: ViewModifier {
    var isBold: Bool
    func body(content: Content) -> some View {
    Group {
        if self.isBold {
            content.font(.custom("HelveticaNeue-Bold", size: 14))
        }else{
            content.font(.custom("HelveticaNeue", size: 14))
        }
    }
  }
}
0
Kiran Jasvanee