SwiftUI - 在预览中模拟 @EnvironmentObject 数据 [英] SwiftUI - Mocking @EnvironmentObject data in preview
问题描述
我有这个代码:
struct WelcomeView: View {
@EnvironmentObject var userService: UserService
var body: some View {
Text(userService.user.username)
}
}
struct WelcomeView_Previews: PreviewProvider {
static var previews: some View {
WelcomeView().environmentObject(UserService())
}
}
我想要实现的所有 UI 组件都使用模拟数据.我需要以某种方式告诉我,在预览中,我希望将 Text(userService.user.username)
视为 Text("Alex")
例如.我怎样才能让它工作?我需要在哪里初始化我的 user.username
以及将这个模拟放在哪里.我只想将 user
对象用于我的所有视图.我只是跳过了这个例子.
What I want to achieve that all my UI components use mock data. I need to tell somehow that in preview I would like to see Text(userService.user.username)
as Text("Alex")
for example. How can I make it work? Where I need to initialise my user.username
and where to put this mock. I just want to use the user
object for all my views. I just skipped them for this example.
推荐答案
假设 UserService
已经正确设计使用依赖注入,它可以使用以下方法对生产代码进行任何显式更改>
Assuming the UserService
has correctly designed using dependency injection, it can be used the following approach with any explicit changes in production code
struct WelcomeView_Previews: PreviewProvider {
static var previews: some View {
let userService = UserService()
userService.user = User(username: "Alex", email: "alex@test.com") // << any predefined set up here
// any more parameters set up here
return WelcomeView().environmentObject(userService)
}
}
这篇关于SwiftUI - 在预览中模拟 @EnvironmentObject 数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!