You can either insert the mock data at the service level or at the view level. Since you'll be using this in multiple views, I'd recommend adding the mock capability to the service (as in the first example below).
I don't know what your UserService looks like so I've added a basic implementation to these examples.
Service level
import SwiftUI
struct User {
var username: String
}
class UserService: ObservableObject {
@Published var user: User = User(username: "Initial username")
// If a mock user is provided to the UserService it will replace the initial user.
init(mockUser: User? = nil) {
if let user = mockUser {
self.user = user
}
}
}
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(mockUser: User(username: "Test username")))
}
}
View level
import SwiftUI
struct User {
var username: String
}
class UserService: ObservableObject {
@Published var user: User = User(username: "Initial username")
}
struct WelcomeView: View {
@EnvironmentObject var userService: UserService
// Optional mock user. Will replace the user from UserService if provided.
var mockUser: User? = nil
var body: some View {
Text((mockUser != nil) ? mockUser!.username : userService.user.username)
}
}
struct WelcomeView_Previews: PreviewProvider {
static var previews: some View {
WelcomeView(mockUser: User(username: "Test username"))
.environmentObject(UserService())
}
}