目前我正在使用addObserver方法在ObservableObject中接收我的愿望通知,另一方面我们可以在视图中使用publisher方法来接收愿望通知,我喜欢在ObservableObject中使用publisher方法而不是addObserver方法,我怎么能这样做呢?如何从类中的publisher接收/通知已发布的值?
import SwiftUI
struct ContentView: View {
@StateObject var model: Model = Model()
var body: some View {
现在,我遇到了注册符合ObservableObject协议的问题。由于ObservableObject使用关联类型,所以在没有编译错误的情况下,我无法找到注册它的方法。
这是我的简单模型,叫做A
protocol A: ObservableObject {}
这是我的简单课,叫B
final class B: A {}
这是我的大会
final class ViewStoreAssembly: Assembly{
func assemble(container: Container) {
container.register(A.self) { _ in
我有一个SwiftUI视图,它接受一个名为appModel的EnvironmentObject。然后,它在其appModel.submodel.count方法中读取值body。我希望这会将我的视图绑定到属性count on submodel,以便在属性更新时重新呈现,但这似乎不会发生。
这是个虫子吗?如果不是,在SwiftUI中将视图绑定到环境对象的嵌套属性的惯用方法是什么?
具体来说,我的模特看起来是这样..。
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: Observable
我在玩SwiftUI,试图了解ObservableObject是如何工作的。我有一个Person对象数组。当我将一个新的Person添加到数组中时,它将在我的视图中重新加载,但是如果我更改了一个现有Person的值,它就不会在视图中重新加载。
// NamesClass.swift
import Foundation
import SwiftUI
import Combine
class Person: ObservableObject,Identifiable{
var id: Int
@Published var name: String
init(i
我有一个视图,它从前面的视图接收ID值。我还需要接受这个ID值并将它传递到一个ObservableObject中,这样我就可以对该ID运行一个Firestore查询,我不知道如何获取ObservableObject的ID。
struct ItemView: View {
var itemName: String
var itemID: String
@ObservedObject var items = getItemsData()
// ..... etc
}
class getItemsData() {
@Published var data =
我试图理解SwiftUI中的MVVM模式,但我不能确切地理解ViewModel是如何侦听和传播来自模型对象的更改的。许多例子,包括苹果的this one,都谈到了让一个模型继承自ObservableObject并直接在你的视图中使用。这是有道理的。 但是,ViewModel观察其底层模型更改的最佳/推荐方式是什么? 一个简单的示例是显示小部件的title的WidgetView,但是title可以在后台从后台网络调用中更改。 class WidgetView: View {
@ObservedObject var widgetVM = WidgetViewModel()
va
我想根据MVVM从视图模型中分离视图。如何在SwiftUI中创建模型?我读到,应该使用结构,而不是课堂。
举个例子,我有一个公园的模型,你可以在那里种植树木:
// View Model
struct Park {
var numberOfTrees = 0
func plantTree() {
numberOfTrees += 1 // Cannot assign to property: 'self' is immutable
}
}
// View
struct ParkView: View {
var park: Park
var body
每个SwiftUI教程/示例都使用由我定义的模型对象,我是编写应用程序的人。但是,当模型对象不在我的直接控制之下时,最佳实践是什么?例如,HomeKit框架有一个获取给定家庭中所有房间的应用编程接口。它返回一个HMRoom对象数组:
open class HMRoom: NSObject
{
open var name: String { get }
open var accessories: [HMAccessory] { get }
open var uniqueIdentifier: UUID { get }
// Update the room
我一直在尝试重用Alert from a BaseView (SwiftUI),它可以由我的项目中的所有视图模型显示,这样我就可以避免样板代码。 为此,我创建了两个视图(BaseView和BaseLoginView)和两个视图模型(BaseViewModel和LoginViewModel) 我意识到不能创建一个BaseViewModel并实现ObservableObject,因为子ViewModel上的所有@Published变量都不会触发任何事件,所以看起来ObservableObject接口必须在最终的ViewModel上实现,在本例中是LoginViewModel。 但是这又导致了另一
当我将一个视图模型嵌套在另一个视图模型中时,我不确定为什么我的视图没有更新。我的理解是,子视图模型中的@Published属性将触发父viewModel中的更改,从而将更改推送到UI。 这是子视图模型: class FilterViewModel : ObservableObject, Identifiable {
var id = UUID().uuidString
var name = ""
var backgroundColour = ""
@Published var selected = false
pr
我正在尝试创建一个checklist视图,其中包含从.json解码的项目列表,当点击项目时,它会将其标记为已完成。我正在努力的是让列表在你将项目标记为已完成时进行更新。目前,它只会在关闭视图然后再次打开后才会更新。 视图如下所示: struct ChecklistView: View {
@Environment(\.presentationMode) var presentationMode
@ObservedObject var checkList: Checklist
var body: some View {
VStack
问题:
我在我的项目中有一个特定的UITableView,我发现自己从这个UITableView复制和粘贴代码,并将代码用于类似的屏幕;这种方法确实困扰着我。
我尝试过的:
我试过想办法解决这个问题。例如,我尝试使用一个委托和一个泛型,但是不断地出现错误。
我尝试将泛型声明添加到我的协调器类(请参阅下面的CustomTableView ) init函数中,但是,我只得到了一些错误,比如:Protocol can only be used as a generic constraint because it has Self or associated type requirements,所以我
如何使视图中的绑定机制类似于在ObservableObject类中发布的、但在两个类之间绑定的机制?也就是说,从A类调用B类构造函数,从A类传递prop1,在B类中存在prop2,这些prop1和prop2应该相互镜像。
附加代码不起作用,只是在视觉上展示我想要的.
PPS: prop1 in ClassA,prop2 in ClassB,必须按条件发布。它自己的意见也是订阅的。
PPPS:重要的是在ClassB中有任何绑定逻辑,以便于重用。
class ClassA: ObservableObject {
@Published var prop1: Bool = false //Wh
在使用Xamarin.Forms或MAUI创建项目时,我很难理解这3件事之间的区别。我知道这些是什么-当您想在XAML中使用绑定时,INotifyPropertyChanged是一个需要实现的接口,BindableObject是实现上述接口的Xamarin.Forms类,ObservableObject是中也实现该接口的一个类。我只是不太明白它们之间的区别(特别是后两者),以及你什么时候会使用它们?我读过不同的教程,它们都说了不同的东西--您需要自己实现接口(因此您的视图模型实现了它),您的视图模型需要从BindableObject继承,或者--如果您使用的是Xamarin Community
我正在尝试将我的C# WPF应用程序从非MVVM移植到MVVM,但我正在努力解决类的继承问题。
我在我的模型中建立了一些层次结构:
一个银行包含一个补丁的集合,它的IsSelected被限制在银行列表视图中。
public abstract class Bank: ObservableCollectionEx<Patch>
{
...
bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set { if (value != _is
我正在开发一个iOS应用程序,使用swiftUI和组合框架以及MVVM。我希望在一个名为LoginService的单独类中处理登录API请求,这个类在LoginViewModel中使用。现在,我想知道应该如何发布和观察视图和ViewModel之间的属性。我的意思是,ViewModel是一个ObservableObject,并且在视图中被观察到,但是由于我在处理服务类中的网络请求,LoginService应该如何通知LoginViewModel和LoginView数据已经接收并且视图应该被更新?
import Foundation
import Combine
class LoginViewM