Xóa bài viết
Bạn có chắc chắn muốn xóa bài viết này không ?
Xóa bình luận
Bạn có chắc chắn muốn xóa bình luận này không ?
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> {
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)
}
Bình luận

{{ comment.user.name }}
Bỏ hay
Hay

Cùng một tác giả

7
1
Giới thiệu Callback là kĩ thuật được ưa chuộng trong lập trình hiện nay. Ngặt nỗi, nếu sử dụng không khéo rất dễ xảy ra callback hell. Dưới con mắ...

5
1
Thời gian đầu làm việc với objc mình khá băn khoăn trong việc sử dụng các thuộc tính trong property như strong, weak, copy, assign. Nhân lúc rảnh r...

5
0
1. Giới thiệu Từ hồi mới bắt đầu làm IOS, thằng nào cũng hỏi mình có biết sử dụng AFNetworking không? Khổ nỗi lúc đó, mình mới chuyển từ làm game ...
Bài viết liên quan

2
3
Xin chào mọi người. Mình xin chia sẽ một UILabel Helper nhỏ dùng trong truờng hợp cần tính chiều cao của UILabel để xác định "Show More" button có ...

14
4
(Link) (Link) (Link) Ở 2 phần tut trước, mình đã hướng dẫn khá chi tiết cách viết một ứng dụng camera có tích hợp chức năng nhận diện khuôn mặ...