タグ付けされた質問 「combine」

4
Swift Combineで@Publishedを使用して計算されたプロパティと同等ですか?
命令型Swiftでは、状態を複製せずにデータへの便利なアクセスを提供するために計算されたプロパティを使用するのが一般的です。 命令型MVCを使用するために作成されたこのクラスがあるとします。 class ImperativeUserManager { private(set) var currentUser: User? { didSet { if oldValue != currentUser { NotificationCenter.default.post(name: NSNotification.Name("userStateDidChange"), object: nil) // Observers that receive this notification might then check either currentUser or userIsLoggedIn for the latest state } } } var userIsLoggedIn: Bool { currentUser != nil } // …

3
ネストされたObservableObjectsにバインドするようにSwiftUIビューに指示する方法
と呼ばれるEnvironmentObjectを取り込むSwiftUIビューがありますappModel。次にappModel.submodel.count、そのbodyメソッドで値を読み取ります。これにより、ビューがプロパティcountにバインドされsubmodel、プロパティが更新されたときに再レンダリングされることが期待されますが、これは発生しないようです。 これはバグですか?そうでなければ、SwiftUIで環境オブジェクトのネストされたプロパティにビューをバインドする慣用的な方法は何ですか? 具体的には、私のモデルは次のようになります... class Submodel: ObservableObject { @Published var count = 0 } class AppModel: ObservableObject { @Published var submodel: Submodel = Submodel() } そして私の見解はこのように見えます... struct ContentView: View { @EnvironmentObject var appModel: AppModel var body: some View { Text("Count: \(appModel.submodel.count)") .onTapGesture { self.appModel.submodel.count += 1 } } } アプリを実行してラベルをクリックすると、countプロパティは増加しますが、ラベルは更新されません。 これをappModel.submodelプロパティとしてに渡すことで修正できますがContentView、できれば避けたいと思います。
18 ios  swift  swiftui  combine 

2
関連エンティティがSwiftUIで変更されたときに@FetchRequestを更新する方法
SwiftUIでは、エンティティのデータとビアの関係に接続されたエンティティのデータを表示ViewすることにList基づいています。そしてそのは私が新しい追加するときに、正しく更新され、新たな関連二エンティティとエンティティ。@FetchRequestPrimarySecondaryViewListPrimary 問題は、Secondary詳細ビューで接続されたアイテムを更新すると、データベースが更新されますが、変更がPrimaryリストに反映されないことです。明らかに、@FetchRequest別のビューでの変更によってトリガーされません。 その後、プライマリビューに新しいアイテムを追加すると、以前に変更されたアイテムが最終的に更新されます。 回避策として、Primary詳細ビューのエンティティの属性をさらに更新すると、変更がPrimaryビューに正しく反映されます。 私の質問は、どうすれば@FetchRequestsSwiftUI Core Data内のすべての関連の更新を強制できますか?特に、関連するエンティティに直接アクセスできない場合は@Fetchrequests? import SwiftUI extension Primary: Identifiable {} // Primary View struct PrimaryListView: View { @Environment(\.managedObjectContext) var context @FetchRequest( entity: Primary.entity(), sortDescriptors: [NSSortDescriptor(key: "primaryName", ascending: true)] ) var fetchedResults: FetchedResults<Primary> var body: some View { List { ForEach(fetchedResults) { primary in NavigationLink(destination: SecondaryView(primary: primary)) { …

3
SwiftUIイニシャライザでビューが@Bindingを必要とするときにPreviewProviderをインスタンス化する方法
SwiftUI(Xcode 11.1)を使用すると、(@ Bindingを使用して)2方向バインディングを設定したビューがいくつかあります。双方向の更新はうまくいきます。 ただし、PreviewProviderからビューをインスタンス化するにはどうすればよいですか? 例えば: struct AddProjectView: View { @Binding public var showModal: Bool var body: some View { return VStack { Text("Add Project View") Button("Dismiss") { self.showModal = false } } } } 「true」はバインディングではないため、これを行うことはできません。 struct AddProjectView_Previews: PreviewProvider { static var previews: some View { AddProjectView(showModal: true) } } 「ローカルプロパティでプロパティラッパーがまだサポートされていない」ため、これを行うことはできません。 …
10 xcode  swiftui  combine 

1
Swiftのバインディング内でオプションの値をアンラップするにはどうすればよいですか?
私はSwiftUIを使用してアプリを構築していBinding<Value?>て、Binding<Value>を> に変換する方法を望んでいます。 私のアプリには、AvatarView特定のユーザーのために画像をレンダリングする方法を知っているがあります。 struct AvatarView: View { @Binding var userData: UserData ... } 私のアプリは、ContentView2つのバインディングを所有するを保持しています。IDによるユーザーの辞書と、アバターを表示する必要があるユーザーのIDです。 struct ContentView: View { @State var userById: Dictionary<Int, UserData> @State var activeUserId: Int var body: some View { AvatarView(userData: $userById[activeUserId]) } } 問題:上記のコードは$userById[activeUserId]タイプBinding<UserData?>でAvatarViewを受け取るため、結合されませんBinding<UserData>。 私が試したもの... $userById[activeUserId]!を展開しようとしているため、機能しませんBinding<UserData?>。アンラップできるのはだけOptionalではなく、Binding<Optional>です。 $(userById[activeUserId]!)私はまだ理解していない理由で機能しませんが、$コンパイル時に何かが解決されるので、任意の式の前にを付けることはできないようです$。
9 ios  swift  swiftui  combine 

2
CombineとSwiftUIを使用した非同期操作
CombineとSwiftUIを使用して非同期操作を処理する方法を理解しようとしています。 たとえば、HealthKitManagerヘルスストアの承認のリクエストを処理するクラスがあります。 final class HealthKitManager { enum Error: Swift.Error { case notAvailable case authorisationError(Swift.Error) } let healthStore = HKHealthStore() func getHealthKitData(for objects: Set<HKObjectType>, completion: @escaping (Result<Bool, Error>) -> Void) { guard HKHealthStore.isHealthDataAvailable() else { completion(.failure(.notAvailable)) return } self.healthStore.requestAuthorization(toShare: nil, read: objects) { completed, error in DispatchQueue.main.async { if let error …

6
結合フレームワークは非同期操作をシリアル化します
Combineフレームワークを構成する非同期パイプラインを同期的に(シリアルに)整列させるにはどうすればよいですか? 対応するリソースをダウンロードするURLが50個あるとします。一度に1つずつダウンロードするとします。私はOperation / OperationQueueでそれを行う方法を知っています。たとえば、ダウンロードが完了するまでそれ自体の終了を宣言しないOperationサブクラスを使用します。Combineを使用して同じことをするにはどうすればよいですか? 現時点で私に発生するのは、残りのURLのグローバルリストを保持し、1つをポップし、1つのダウンロード用にその1つのパイプラインを設定し、ダウンロードを実行しsink、パイプラインので繰り返します。これはCombineのようには見えません。 私はURLの配列を作成し、それをパブリッシャーの配列にマッピングしようとしました。パブリッシャーを "作成"して、を使用してパイプラインの下にパブリッシュさせることができることを知っていflatMapます。しかし、それでも私はまだすべてのダウンロードを同時に行っています。制御された方法でアレイをウォークするCombineの方法はありません—またはありますか? (Futureで何かをすることも想像していましたが、どうしようもなく混乱しました。この考え方には慣れていません。)
8 ios  swift  combine 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.