Result type trong xử lý Networking

1. Giới Thiệu

Chào mọi người, mình là Lâm.

Hôm này mình xin viết 1 bài về Result type trong Swift và cách nó kết hợp với xử lý Networking để viết ra những đoạn code ngắn gọn, súc tích, dễ đọc, dễ maintain. Trước Swift 5 thì nó là 1 custom type phải tự viết, tuy nhiên sau đấy chắc mn thấy nó hay nên từ Swift 5 thì nó đã trở thành 1 type build-in của Swift luôn (https://developer.apple.com/documentation/swift/result) .

Có thể thấy ngôn ngữ Swift phát triển liên tục và nhiều trong số đấy là từ những ý tưởng đóng góp của cộng đồng developer

2. Ý tưởng

Khi xử lý những tác vụ trong lập trình, chúng ta luôn mong muốn là khi input 1 cái gì đấy vào, thì output của nó ra sẽ chỉ là 1 trong 2 case: success hoặc fail. Như vậy thì luồng xử lý của chúng ta sau đấy sẽ rất clear và gọn gàng.
Tuy nhiên success thì có nhiều kiểu giá trị trả về, fail thì cũng có nhiều kiểu lỗi bắn ra, vậy thì mình cần phải có 1 type để uniform được các trường hợp, quy về 1. Thì đấy chính là mục đích của Result type.

Ý tưởng của Result type rất đơn giản, nó là 1 generic Enum, gồm 2 generic là Success và Failure, và có 2 case: 1 cho success và 1 cho failure.
– Case success sẽ chứa value mà chúng ta expect.
– Case failure sẽ chứa error bắn ra.

enum Result < Success, Failure: Error > {
    case success(Success)
    case failure(Failure)
}

3. Áp dụng

Nói về xử lý Networking, ví dụ trong mô hình MVC, thường chúng ta sẽ tạo ra 1 func thế này ở Model:

func loadData(url: URL, completion: @escaping (Data?, Error?) -> Void) {
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let error = error {
            completion(nil, error)
        }
         if let data = data {
             completion(data, nil)
        }
    }
    task.resume()

}


Rồi ở bên ViewController chúng ta sẽ hứng và xử lý tiếp như thế này:

model.loadData(url: url) { [weak self] (data, error) in
    guard let self = self else { return }
    if let error = error {
        // handle error...
    }
     if let data = data {
        // handle response...
    }
}

Có 2 cái ko hay ở đây:
– Cái ko hay thứ 1 là với completion: (Data?, Error?) chúng ta sẽ có tổng cộng 4 case xảy ra:
+ (data, error)
+ (data, nil)
+ (nil, error)
+ (nil, nil)
Case đầu tiên (data, error) và case cuối cùng (nil, nil) là 2 case mà sẽ không bao giờ mong muốn. Vì output ko thể nào vừa có data lại vừa có error, hay output ko có gì cả, như vậy thì sẽ rất confuse.

– Cái ko hay thứ 2 là ở đầu bên kia (ViewController) khi nhận response từ Model sẽ phải xử lý 2 parameter với type là optional (data và error), rồi lại if/else 1 hồi để handle đủ case.

Bây giờ nếu chúng ta sử dụng Result type vào thì nó sẽ như thế này:

func loadData(url: URL, handler: @escaping (Result<Data, Error>) -> Void) {

        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let error = error {
                completion(.failure(error))
            }
            if let data = data {
                completion(.success(data))
            }
        }
    }

và đầu bên kia xử lý sẽ như thế này:

        model.loadData(url: url) { [weak self] result in
            guard let self = self else { return }
            switch result {
            case .failure(let error):
                // handle error...
            case .success(let data):
                // handle success...
            }
        }

sẽ chỉ phải xử lý 1 parameter là result: Result, và Result chỉ có 2 case là success/fail, đúng với những gì cta mong muốn, code nhìn clear hơn nhiều, thay đống if/else bằng switch/case cũng làm code dễ đọc hơn.

4. Mở rộng

Về cơ bản là như vậy, mở rộng hơn thì chúng ta có thể define chi tiết hơn về lỗi.
Nhìn lại declaration:

enum Result < Success, Failure: Error > {
    case success(Success)
    case failure(Failure)
}

chúng ta thấy Failure đang đơn giản adopt vào protocol Error. Error thì rất common, nó khá là chung chung, gọi là lỗi gì vứt vào đây cũng được. Bây giờ muốn specific hơn về lỗi, cta có thể tạo 1 custom type, vì Result của cta nhận vào generic là 1 Error nên custom type của cta chỉ cần adopt vào protocol Error là được:

enum VideoError: Error {
    case networkFailure(Error)
    case exceedSize
    case invalidFormat
}

khi gọi API:

    func loadData(url: URL, completion: @escaping (Result<Data, VideoError>) -> Void) {

        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

            if let error = error {
                completion(.failure(.networkFailure(error)))
                return
            }

            if exeedSize {
                completion(.failure(.exceedSize))
                return
            }

            if invalidFormat {
                completion(.failure(.invalidFormat))
                return
            }

            if let data = data {
                completion(.success(data))
            }
        }
    }

và đầu bên kia xử lý:

       model.loadData(url: url) { [weak self] result in
            guard let self = self else { return }
            switch result {
            case .success(let data):
                // handle success...
            case .failure(.networkFailure(let error)):
                // handle networking error...
            case .failure(.exceedSize):
                // handle exceedSize...
            case .failure(.invalidFormat):
                // handle invalid format...
            }
        }

có thể thấy luồng đi rất clear.

Bên trên là Result mình tự viết, đối với built-in của Swift 5 thì type còn có 1 số những methods:
get: để lấy ra success value
map/flatMap: để transform success value thành 1 dạng khác
mapError/flatMapError: để transform failure error thành 1 dạng khác
==, != : để so sánh xem 2 result có giống nhau hay ko
Mn có thể đọc chi tiết trong docs:
https://developer.apple.com/documentation/swift/result

Nói chung nó sẽ hỗ trợ để mình xử lý thêm cho data/error trả về (hình dung mình có thể viết 1 cái extension để decode success value thành object luôn chẳng hạn).

OK, hy vọng mn cảm thấy hữu ích.
Thanks for reading.


Posted

in

,

by

Comments

23 responses to “Result type trong xử lý Networking”

  1. marshallll16 Avatar

    Top 10 most porn watching countries in the world india on 3rd
    http://crazy-amateur-88912204.1.on-1-sex-cam.lexixxx.com/?esmeralda-makaila

    free mobile videos of gay porn kacey porn star free squirt porn site veronica caine porn reporter bfa porn

  2. RobertToorp Avatar

    ?? Ищете идеальную квартиру? Мы предлагаем широкий выбор современных апартаментов в сердце города! ?? Уютные комнаты, паркинг, развитая инфраструктура и близость к метро сделают вашу жизнь комфортной. ?? Не упустите шанс — звони сейчас и запишитесь на просмотр! Ваш новый дом ждет! ??==>>>
    ТЦ Авиапарк: рестораны, кафе и бары в Москве

  3. inasc60 Avatar

    Satine phoenix lesbian porn girl on girl xxx lesbify
    http://android-sexy-silk.id.link-porncom.hotnatalia.com/?marcella-maia

    porn polish boy and doctor cartoon porn make money with web cam porn u tube teen asian porn impossibles porn

  4. maxlf4 Avatar

    Cheating hentai collection in hentai haven watch free hentai hd
    https://porn-tenticles.tiktokpornstar.com/?estefani-sydni

    sexiest free porn galleries free porn facefuck frmale porn stars that squirt hottest japanese porn virtual avatar gay porn site interactive

  5. BrockPen Avatar
    BrockPen

    Kraken официальный сайт

    Ищете надежную платформу для торгов и инвестиций в криптовалюту? Познакомьтесь с Kraken! Это один из самых известных и безопасных криптобирж в мире.

    Почему стоит выбрать Kraken?

    Безопасность: Ваши средства защищены передовыми технологиями.
    Широкий выбор: Более 50 криптовалют для торговли, включая биткойн и эфир.
    Удобный интерфейс: Простая навигация и интуитивно понятные инструменты для анализа.
    Низкие комиссии: Конкурентные ставки на торговлю для максимизации ваших доходов.
    Поддержка: Круглосуточная помощь от профессионалов.

    Зарегистрируйтесь на официальном сайте Kraken сегодня и получите доступ к премиальной платформе для торговли!
    Присоединяйтесь к миллионам пользователей и начните свою крипто-приключение прямо сейчас!<a
    кракен тор

  6. MichaelTalty Avatar
    MichaelTalty

    В world of Kraken data protection и confidentiality are a priority. Эта онлайн-площадка offers convenient access к разнообразным сервисам, которые guarantee maximum privacy. Здесь standard restrictions не имеют силы, что allows you свободно взаимодействовать ресурсами сети.
    вход кракен ат

  7. candyph60 Avatar

    The ultimate guide to books on porn ever accountable
    https://magga-miss.tiktok-pornhub.com/?raegan-kelsie

    free sexy skinny porn similar sites to you porn booty free porn gallery bubble but gay porn porn videogame

  8. pamli18 Avatar

    Teenage girl tricks her mom into catching her dad cheating by
    https://boobjob.relayblog.com/?kaley-amani

    delete porn mail porn i need money video box office porn free xxx porn australia videos you porn pixie

  9. RichardRop Avatar

    Купить квартиру в Москве – это ваш шанс на комфорт и стабильность!
    Просторные и светлые квартиры в лучших районах столицы ждут вас.
    Отличная инфраструктура, развитый транспорт и близость к культуре делают жизнь здесь уникальной.
    Инвестируйте в ваше будущее – выберите квартиру мечты уже сегодня! ЖК Огни: доступные квартиры в Москве в районе Раменки

  10. clarencegq3 Avatar

    Watch pamela anderson xxx videos mobile pamela anderson
    https://fatti-femdom.topanasex.com/?amara-allyson

    naughty daughter daddy porn top 10 porn websites mulder scully porn free hot mom and son porn free home porn pics

  11. Robert Avatar

    Принимать финансовые решения может быть сложно. Но с нашим каталогом финансовых продуктов это стало проще, чем когда-либо!
    потребительский кредит
    Мы собрали все лучшие финансовые продукты в одном месте, чтобы вы могли легко сравнить их и найти те, которые подходят именно вам. Наши экспертные обзоры и рейтинги помогут вам принять обоснованное решение, соответствующее вашим уникальным потребностям.
    Независимо от того, ищете ли вы кредит наличными, дебетовую карту или инвестиционный счет, наш каталог финансовых продуктов поможет вам сделать правильный выбор.

  12. BrockPen Avatar
    BrockPen

    Kraken официальный сайт

    Ищете надежную платформу для торгов и инвестиций в криптовалюту? Познакомьтесь с Kraken! Это один из самых известных и безопасных криптобирж в мире.

    Почему стоит выбрать Kraken?

    Безопасность: Ваши средства защищены передовыми технологиями.
    Широкий выбор: Более 50 криптовалют для торговли, включая биткойн и эфир.
    Удобный интерфейс: Простая навигация и интуитивно понятные инструменты для анализа.
    Низкие комиссии: Конкурентные ставки на торговлю для максимизации ваших доходов.
    Поддержка: Круглосуточная помощь от профессионалов.

    Зарегистрируйтесь на официальном сайте Kraken сегодня и получите доступ к премиальной платформе для торговли!
    Присоединяйтесь к миллионам пользователей и начните свою крипто-приключение прямо сейчас!<a
    kraken зайти

  13. Mark Avatar

    Ищете лучшие финансовые решения? Наш сайт предлагает широкий ассортимент кредитов, банковских карт и займов, чтобы помочь вам достигать ваших целей и воплощать мечты. Хотите купить жилье, автомобиль или оплатить учебу? Наши кредитные программы подходят для любых нужд. Оформите кредит на нашем сайте за несколько минут, выбрав лучшие условия и сроки погашения. Наши банковские карты обеспечивают удобство безналичных платежей и множество бонусов. Получите кэшбэк, скидки у партнеров и участвуйте в программе лояльности. Выберите карту с оптимальными лимитами и условиями обслуживания для себя. Если вам не хватает денег до зарплаты или на неожиданные расходы, наши займы – это быстрое и удобное решение. Мы предлагаем прозрачные условия и мгновенное одобрение заявок, чтобы вы могли решить свои финансовые вопросы без задержек и лишних хлопот. Наши преимущества: простота и удобство – оформление заявки онлайн за считанные минуты; надежность и прозрачность – честные условия без скрытых комиссий; индивидуальный подход – учет ваших личных обстоятельств. Не упустите возможность улучшить свою финансовую ситуацию. Оформите кредит, банковскую карту или займ на нашем сайте уже сегодня и наслаждайтесь всеми преимуществами сотрудничества с надежным финансовым партнером. Сделайте шаг к своим мечтам на нашем сайте!

    Дебетовая «СберКарта» в Ангарске

  14. MichaelTalty Avatar
    MichaelTalty

    В мире Kraken ваша безопасность и анонимность ставятся на первое место. Эта онлайн-площадка offers easy usage к various services, которые guarantee максимальную приватность. Здесь стандартные ограничения не имеют силы, что allows you freely interact network resources.
    вход kraken

  15. patricawi60 Avatar

    Leading porn sites caught by new eu law to police online content
    https://initiative-homemade-porn.instasexyblog.com/?karen-kelli

    gay ebony porn usher hentai porn minigames downlode able porn top amateur porn tubes free porn glory bi

  16. BrockPen Avatar
    BrockPen

    Kraken официальный сайт

    Ищете надежную платформу для торгов и инвестиций в криптовалюту? Познакомьтесь с Kraken! Это один из самых известных и безопасных криптобирж в мире.

    Почему стоит выбрать Kraken?

    Безопасность: Ваши средства защищены передовыми технологиями.
    Широкий выбор: Более 50 криптовалют для торговли, включая биткойн и эфир.
    Удобный интерфейс: Простая навигация и интуитивно понятные инструменты для анализа.
    Низкие комиссии: Конкурентные ставки на торговлю для максимизации ваших доходов.
    Поддержка: Круглосуточная помощь от профессионалов.

    Зарегистрируйтесь на официальном сайте Kraken сегодня и получите доступ к премиальной платформе для торговли!
    Присоединяйтесь к миллионам пользователей и начните свою крипто-приключение прямо сейчас!<a
    кракен зеркало

  17. sheilavz1 Avatar

    Gratis pornovideo s hardcore volwassen seksfilms pornobuis
    https://bisexuals-oboobs.jsutandy.com/?mary-keely

    free underground porn movies clipnabber porn my illegal porn collection lea walker free porn free mobile taboo porn videos

  18. Joshua Avatar

    Наш сайт предлагает вам лучшие финансовые решения! Мы предоставляем разнообразные финансовые продукты, включая кредиты, банковские карты и займы, чтобы помочь вам достигать ваших целей и воплощать мечты. Планируете купить жилье, автомобиль или оплатить учебу? Наши кредитные программы созданы специально для вас. Оформите кредит на нашем сайте всего за несколько минут, выбрав подходящие условия и срок погашения. Наши банковские карты предоставляют не только удобство безналичных платежей, но и множество бонусов и привилегий. Оформите карту онлайн и получайте кэшбэк, скидки у партнеров и участие в программе лояльности. Мы предлагаем карты с различными лимитами и условиями обслуживания, чтобы вы могли выбрать оптимальный вариант для себя. Если вам не хватает средств до зарплаты или на непредвиденные расходы, наши займы – это быстрое и удобное решение. Мы предлагаем прозрачные условия и быстрое одобрение заявок, чтобы вы могли решить свои финансовые вопросы без задержек. Наши преимущества: простота и удобство – оформление заявки онлайн за считанные минуты; надежность и прозрачность – честные условия без скрытых комиссий; индивидуальный подход – учет ваших личных обстоятельств. Не упустите шанс улучшить свою финансовую ситуацию. Оформите кредит, банковскую карту или займ на нашем сайте уже сегодня и наслаждайтесь всеми преимуществами работы с надежным финансовым партнером. Сделайте шаг к своим мечтам на нашем сайте!

    Дебетовая Альфа-Карта в Дзержинске

  19. claudinebh69 Avatar

    Free cindy dollar porno videos best porn tube tuberel
    https://site-mobile.titsamateur.com/?melina-naomi

    jizzhunt porn cheerleader porn auditions all comics porn tattooed guy porn adult porn search taboo

  20. Code of your destiny Avatar

    I am really inspired together with your writing talents and also with the structure in your blog. Is this a paid subject or did you modify it your self? Anyway stay up the excellent quality writing, it’s rare to look a nice weblog like this one these days!

  21. BrockPen Avatar
    BrockPen

    Kraken официальный сайт

    Ищете надежную платформу для торгов и инвестиций в криптовалюту? Познакомьтесь с Kraken! Это один из самых известных и безопасных криптобирж в мире.

    Почему стоит выбрать Kraken?

    Безопасность: Ваши средства защищены передовыми технологиями.
    Широкий выбор: Более 50 криптовалют для торговли, включая биткойн и эфир.
    Удобный интерфейс: Простая навигация и интуитивно понятные инструменты для анализа.
    Низкие комиссии: Конкурентные ставки на торговлю для максимизации ваших доходов.
    Поддержка: Круглосуточная помощь от профессионалов.

    Зарегистрируйтесь на официальном сайте Kraken сегодня и получите доступ к премиальной платформе для торговли!
    Присоединяйтесь к миллионам пользователей и начните свою крипто-приключение прямо сейчас!<a
    кракен даркнет

  22. Joseph Avatar

    Наш сайт предлагает вам лучшие финансовые решения! Мы предоставляем разнообразные финансовые продукты, включая кредиты, банковские карты и займы, чтобы помочь вам достигать ваших целей и воплощать мечты. Планируете купить жилье, автомобиль или оплатить учебу? Наши кредитные программы созданы специально для вас. Оформите кредит на нашем сайте всего за несколько минут, выбрав подходящие условия и срок погашения. Наши банковские карты предоставляют не только удобство безналичных платежей, но и множество бонусов и привилегий. Оформите карту онлайн и получайте кэшбэк, скидки у партнеров и участие в программе лояльности. Мы предлагаем карты с различными лимитами и условиями обслуживания, чтобы вы могли выбрать оптимальный вариант для себя. Если вам не хватает средств до зарплаты или на непредвиденные расходы, наши займы – это быстрое и удобное решение. Мы предлагаем прозрачные условия и быстрое одобрение заявок, чтобы вы могли решить свои финансовые вопросы без задержек. Наши преимущества: простота и удобство – оформление заявки онлайн за считанные минуты; надежность и прозрачность – честные условия без скрытых комиссий; индивидуальный подход – учет ваших личных обстоятельств. Не упустите шанс улучшить свою финансовую ситуацию. Оформите кредит, банковскую карту или займ на нашем сайте уже сегодня и наслаждайтесь всеми преимуществами работы с надежным финансовым партнером. Сделайте шаг к своим мечтам на нашем сайте!

    Ак Барс Банк – кредитная карта 115 дней без процентов

  23. BrockPen Avatar
    BrockPen

    Kraken официальный сайт

    Ищете надежную платформу для торгов и инвестиций в криптовалюту? Познакомьтесь с Kraken! Это один из самых известных и безопасных криптобирж в мире.

    Почему стоит выбрать Kraken?

    Безопасность: Ваши средства защищены передовыми технологиями.
    Широкий выбор: Более 50 криптовалют для торговли, включая биткойн и эфир.
    Удобный интерфейс: Простая навигация и интуитивно понятные инструменты для анализа.
    Низкие комиссии: Конкурентные ставки на торговлю для максимизации ваших доходов.
    Поддержка: Круглосуточная помощь от профессионалов.

    Зарегистрируйтесь на официальном сайте Kraken сегодня и получите доступ к премиальной платформе для торговли!
    Присоединяйтесь к миллионам пользователей и начните свою крипто-приключение прямо сейчас!<a
    кракен открыть

Leave a Reply to MichaelTalty Cancel reply

Your email address will not be published. Required fields are marked *