Swift ObsearbleObject реализация с общим выводомIOS

Программируем под IOS
Ответить
Anonymous
 Swift ObsearbleObject реализация с общим выводом

Сообщение Anonymous »

Я должен признать, что мои знания о Swift ограничены, и я не могу обойтись по этой проблеме. Приложение.

Код: Выделить всё

protocol AuthRepository {
associatedtype AuthData
associatedtype AuthResponseData
associatedtype RegistrationData
associatedtype RegistrationResponseData

func login(with data: AuthData) async throws -> AuthResponseData?

func register(with data: RegistrationData) async throws -> RegistrationResponseData?
}
< /code>
и реализация для моего сервера < /p>
struct MyServerAuthData {
let email: String
let password: String
}

struct  MyServerAuthResponseData {
let token: String
}

struct  MyServerRegistrationData {
let email: String
let password: String
let name: String
}

actor AuthRepositoryImpl: AuthRepository {
func login(with data: MyServerAuthData) async throws ->  MyServerAuthResponseData? {
...
}

func register(with data:  MyServerRegistrationData) async throws -> Void? {
...
}
}
< /code>
Для использования в приложении я создал этот ViewModel < /p>
@MainActor
final class AuthViewModel: ObservableObject {
private let repository: T

init(repository: T) {
self.repository = repository
}

func login(data: T.AuthData) async throws -> T.AuthResponseData? {
try await repository.login(with: data)
}

func register(with data: T.RegistrationData) async throws {
try await repository.register(with: data)
}
}
< /code>
Определено в приложении как < /p>
@main
struct MyApp: App {
@StateObject var authViewModel = AuthViewModel(repository: AuthRepositoryImpl())

var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(self.authViewModel)
}
}
}
< /code>
и потребляется как < /p>
@EnvironmentObject private var authViewModel: AuthViewModel
Но с помощью этого кода вся концепция использования общей реализации для репозитория Auth бесполезно, потому что изменение Authrepostory необходимо будет искать и заменить AuthviewModel Все приложение. .
Есть лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -inference
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»