13/01/2019, 00:37

[SWIFT]-Enum hack

Enum là gì? An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. => Enum định nghĩa 1 nhóm các giá trị có liên quan đến nhau và cho phép bạn làm việc với những giá trị đó 1 cách an toàn trong code ...

Enum là gì?

An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code.

=> Enum định nghĩa 1 nhóm các giá trị có liên quan đến nhau và cho phép bạn làm việc với những giá trị đó 1 cách an toàn trong code của bạn Ví dụ bạn có thể định nghĩa ra một tập hợp các ngày trong tuần (Thứ 2, 3,... , chủ nhật).

let CONST_MONDAY = 2;
let CONST_TUESDAY = 3;
let CONST_WEDNESDAY = 4;
let CONST_THURSDAY = 5;
let CONST_FRIDAY = 6;
let CONST_SATURDAY = 7;
let CONST_SUNDAY = 1;

Một hàm mô phỏng lấy ra tên công việc sẽ làm ứng với ngày cụ thể trong tuần. (Giống kiểu thời khóa biểu)

// Tham số truyền vào là ngày trong tuần.
// Trả về tên công việc sẽ làm.
func getJobByDay(dayInWeek: Int) -> String {
     
    if (dayInWeek == CONST_SATURDAY
        || dayInWeek == CONST_SUNDAY) {
        return "Nothing";
    }
    return "Coding";
     
}

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):
    // TODO
case .failure(let error):
    // TODO
}

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:

unc 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ài liên quan

[SWIFT]-Enum hack

Enum là gì? An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. => Enum định nghĩa 1 nhóm các giá trị có liên quan đến nhau và cho phép bạn làm việc với những giá trị đó 1 cách an toàn trong code ...

Trịnh Tiến Mạnh viết 00:37 ngày 13/01/2019

Tìm hiểu Swift Either enum

Enum trong Swift rất mạnh mẽ và đa năng. Swift enum là 1 type với nguyên tắc riêng, có hỗ trợ cả methods và initializers, và tính năng liên kết các giá trị (Associated Value) cho phép chúng ta sử dụng 1 cách tiện lợi. Ví dụ về sức mạnh của enum là Optional type. Optional được xác ...

Trần Trung Dũng viết 22:51 ngày 10/10/2018

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> { ...

Hoàng Hải Đăng viết 15:45 ngày 07/09/2018

Những đặc điểm của Enum trong Swift

An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. => Enum định nghĩa 1 nhóm các giá trị có liên quan đến nhau và cho phép bạn làm việc với những giá trị đó 1 cách an toàn trong code của bạn ...

Tạ Quốc Bảo viết 16:48 ngày 12/08/2018

Tại sao Swift Enum có giá trị liên kết không thể có RawValue?

Trong lập trình Swift, chắc hẳn chúng ta sử dụng chắc hẳn sử dụng rất nhiều kiểu dữ liệu Enum . Enum trong swift dùng để định nghĩa một tập hợp có số phần tử cố định và liệt kê sẵn, chúng ta không thể không thể thêm hoặc bớt được số phần tử. Trong bài viết này tôi muốn giới thiệu đến các bạn ...

Trịnh Tiến Mạnh viết 16:32 ngày 12/08/2018
0