English topic guide inspired by the original iOS Developer Notebook, expanded for both iOS and Android teams.
protocol GetProfileUseCase { func execute() async throws -> User }
final class GetProfile: GetProfileUseCase {
private let repo: ProfileRepository
init(repo: ProfileRepository) { self.repo = repo }
func execute() async throws -> User { try await repo.profile() }
}
class GetProfileUseCase(private val repo: ProfileRepository) {
suspend operator fun invoke(): User = repo.profile()
}
class ProfileVm(private val getProfile: GetProfileUseCase): ViewModel()