07/09/2018, 15:45
Enum hack
Giới thiệu Có nhiều cách để viết Enum hơn là làm bánh hay làm tình. Ở bài viết này mình sẽ trình bày một hướng đi, hi vọng mọi người sẽ like :D Kiểu phổ thông Chắc hẳn chúng ta thấy kiểu viết enum này rất quen thuộc, đặc biệt là đối với những ai dùng alamofire enum Result<T> { ...
Giới thiệu
Có nhiều cách để viết Enum hơn là làm bánh hay làm tình. Ở bài viết này mình sẽ trình bày một hướng đi, hi vọng mọi người sẽ like :D
Kiểu phổ thông
Chắc hẳn chúng ta thấy kiểu viết enum này rất quen thuộc, đặc biệt là đối với những ai dùng alamofire
enum Result<T> { case success(T) case failure(Error) public var value: T? { switch self { case .success(let v): return v case .failure: return nil } } public var error: Error? { switch self { case .success: return nil case .failure(let e): return e } } }
và để sử dụng Result ta sẽ switch - case như này:
switch result { case .success(let value): // your code case .failure(let error): // your code }
Kiểu for fun
Mình không thích switch - case cho lắm, vậy nên sẽ "hack" chút theo ý mình thích.
Ở enum vừa rồi, mình sẽ thêm 2 hàm:
func isSuccess(complete: @escaping (T) -> Void) -> Result<T> { guard let value = self.value else { return self } complete(value) return self } func `else`(complete: @escaping (Error) -> Void) { guard let err = self.error else { return } complete(err) }
Vậy là từ giờ mình có thể check kết quả theo cách sau
let r: Result<Int> = .success(10) r.isSuccess { (value) in print("show value:", value) }.else { (err) in print(err) }