Back to list

RxSwift-style Observable

Lv.51401@mukitaro0 playsJan 2, 2026

RxSwift reactive programming pattern. Reactive Extensions for Swift.

preview.swift
Swift
1import RxSwift
2import RxCocoa
3
4struct User {
5 let id: Int
6 let name: String
7 let email: String
8}
9
10class UserViewModel {
11 private let disposeBag = DisposeBag()
12
13 let searchText = BehaviorRelay<String>(value: "")
14 let users = BehaviorRelay<[User]>(value: [])
15 let isLoading = BehaviorRelay<Bool>(value: false)
16 let error = PublishRelay<Error>()
17
18 var filteredUsers: Observable<[User]> {
19 Observable.combineLatest(users, searchText)
20 .map { users, query in
21 guard !query.isEmpty else { return users }
22 return users.filter { $0.name.lowercased().contains(query.lowercased()) }
23 }
24 }
25
26 func fetchUsers() {
27 isLoading.accept(true)
28
29 fetchUsersFromAPI()
30 .observe(on: MainScheduler.instance)
31 .subscribe(
32 onNext: { [weak self] users in
33 self?.users.accept(users)
34 },
35 onError: { [weak self] err in
36 self?.error.accept(err)
37 },
38 onCompleted: { [weak self] in
39 self?.isLoading.accept(false)
40 }
41 )
42 .disposed(by: disposeBag)
43 }
44
45 private func fetchUsersFromAPI() -> Observable<[User]> {
46 return Observable.just([User(id: 1, name: "Alice", email: "alice@example.com")])
47 }
48}

Custom problems are not included in rankings