我正在开发一个iOS应用程序,使用swiftUI和组合框架以及MVVM。我希望在一个名为LoginService的单独类中处理登录API请求,这个类在LoginViewModel中使用。现在,我想知道应该如何发布和观察视图和ViewModel之间的属性。我的意思是,ViewModel是一个ObservableObject,并且在视图中被观察到,但是由于我在处理服务类中的网络请求,LoginService应该如何通知LoginViewModel和LoginView数据已经接收并且视图应该被更新?
import Foundation
import Combine
class LoginViewM
我有一个带有支持ViewModel的ViewModel表单。当ViewModel更改时,我希望启用一个保存按钮。我有以下代码:
class ViewModel: ObservableObject {
@Published var didUpdate = false
@Published var name = "Qui-Gon Jinn"
@Published var color = "green"
private var cancellables: [AnyCancellable] = []
init() {
我试图在SwiftUI中使用新的导航功能,而现在,当目的视图创建两次以上时,我在NavigationLink中遇到了类似的早期问题。你能帮我找到正确的解决办法吗。
enum Step: String, Identifiable {
case page1
case page2
case page3
var id: String {
self.rawValue
}
}
class Router: ObservableObject {
@Published var steps: [Step] = []
static l
我试图做一个非常简单的拖放列表,它是动画的(不是经典的List(),定制的)。这意味着用户可以拖动列表中的项目。但是,当通过两个数组和一个经过计算的索引访问动画时,我似乎遇到了问题(请参阅问题末尾的DropDelegate结构,并链接到视频:)。为了解释我的意思,下面是一个例子的模型和ViewModel:
struct Shelf: Identifiable {
var books: [Book]
var id: Int
}
struct Book: Identifiable {
var name: String
var id: Int
}
class Vi
在带有ReactiveUI的MVVM应用程序中:我为一些实体提供了一个简单的编辑器表单,比如Person。在左边,我有一个ListBox,显示所有可用的人。在右边,我有一个表格,显示被选中的人的属性。我的代码绑定如下所示:
this.OneWayBind(this.ViewModel, x => x.Persons, x => x.LBPersons.ItemsSource).DisposeWith(disposables);
this.Bind(this.ViewModel, x => x.SelectedPerson, x => x.LBPersons.Select
我在MVC还是个新手,所以请耐心听我说。由于电子邮件和创建的电子邮件都是在模型中验证的,并且ModelView正在创建同一用户模型的实例,因此以下验证是否可以接受?
或者,您是否需要在模型和ModelView中显式调用相同的字段?
//Model Class
public class User
{
[Required]
public string Email {get; set;}
[Required]
public DateTime Created {get; set;}
}
//ViewModel
我在一个Binding<Bool>视图中有一个swiftUI绑定。与…有关的东西:
struct MyCoolView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
Text("Here is a cool Text!").sheet(isPresented: $viewModel.MyProperty) {
SomeModalView()}
}
}
我希望isPresented使用布尔否定
我是新来SwiftUI的。我使用UIKit和组合框架构建了一个使用ViewModel、UseCases和存储库的架构。我的所有架构都是基于负载状态的。我的加载状态是这样构建的: /// Equivalent to @Published with `LoadingState<T, E>` property wrapper
@propertyWrapper public class Loading<T, E: Swift.Error> {
public typealias State = LoadingState<T, E>
public var wrapp
我正在尝试创建某种类型的解决方案,用于向SwiftUI视图模型注入依赖项,但我不知道我是在做什么,还是需要把它带回绘制表。
struct MyAppName: App {
private static var serviceToInject = ServiceToInject()
@StateObject var viewModel1 = ViewModel1(service: serviceToInject)
@StateObject var viewModel2 = ViewModel2(service: serviceToInject)
var body: some Scene {
所以,我有这个小应用程序有一个按钮,我可以改变主视图显示它的项目的方式,一个网格或列表。但是当它从一个过渡到另一个的时候,我想添加一个小动画。我搞砸了,试图在按钮上添加withAnimation,或者在视图中添加.transition(),但是似乎什么都做不到。关于我如何做到这一点,有什么建议吗?
struct FrameworkGridView: View {
@StateObject var viewModel = FrameworkGridViewModel()
@Binding var isGrid: Bool
var body: some View {
我想为用SwiftUI实现的体系结构实现一个导航器/路由器。简而言之,View将与Router共享viewModel。当View触发viewModel上的更改时,Router应该导航到新的工作表。
这是我的代码的一个版本,我将直接将viewModel从View传递给Router。有什么不对劲吗?我最大的疑问是,由于我在Router和View上都使用了viewModel,所以创建了两个不同的viewModel实例。
视图模型
class BootViewModel:ObservableObject{
@Published var presentSignIn = false
}
视图
st
从我的观点来看,我有一个通过@StateObject调用的@StateObject类。在该类中有一个函数,整个类被标记为@MainActor。在我看来,有一个带有TextField修饰符的onChange,它通过viewModel.funcname对该函数执行调用。
Xcode正在抱怨错误为:
Converting function value of type '@MainActor (String) -> Void' to '(String) -> Void' loses global actor 'MainActor'
我已经研究
我正在学习这门课程,讲师添加了代码来向DB中添加记录。要添加到DB中的类如下所示:
public class Gig
{
public int Id { get; set; }
public ApplicationUser Artist { get; set; }
[Required]
public string ArtistId { get; set; }
public DateTime DateTime { get; set; }
[Required]
[StringLength(255)]
public s
当通过cloudkit同步新信息时,我在获取要更新的视图时遇到问题。在两个设备上运行此应用程序时,如果设备A添加了调色板,则该调色板仅在应用程序重启时显示在设备B上。我看过其他一些关于堆栈溢出的答案,但都没有成功。有谁知道吗? 下面是我来自AppDeligate的持久性容器 lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "Swatch")
// get
我试图显示这样一个简单的文本列表:
class ViewModel: ObservableObject {
@Published var users = [UserModel]()
...
List(viewModel.users) { user in
Text(user.name) //this line doesn't get executed
}
class UserModel: BaseMapperModel, Identifiable {
var id: Int = -1
var name: String = "Unk
假设你有一些对象的列表--比如说猫。有一个公共视图模型,用于存储从服务器接收到的猫的数据。视图上的每个元素都是一只猫的一小部分数据。在此扇区内,用户可以更改数据。如何正确链接猫列表的视图模型和一只猫的视图模型?
struct Cat : Identifiable {
let id = UUID()
var name: String
var breed: String
}
struct CatListView : View {
@ObservedObject private(set) var viewModel: ViewModel
var body: s