24 Tiện ích(extension) giúp cho Code được Clear hơn !

Tram Ho

Theo tôi, một trong những tính năng tốt nhất của cả Swift và Objective-C là phần mở rộng(extensions). Chúng cho phép bạn thêm các phương thức mới vào bất kỳ lớp nào và toàn bộ dự án sẽ có thể gọi chúng mà không cần kế thừa và nạp chồng thêm .

Là một nhà phát triển thiết bị di động, tôi làm việc với cả iOS và Android, và tôi thường thấy các hàm và phương pháp của Android ngắn hơn, gọn gàng hơn và dễ hiểu hơn trong Swift. Cùng với một số phương thức mới (phần mở rộng), chúng ta sẽ có được một đoạn mã ngắn gọn, sạch sẽ và dễ bảo trì trong Swift.

Tôi sẽ sử dụng Swift, nhưng tất cả các phần mở rộng này có thể được chuyển sang Objective-C hoặc sử dụng với Objective-C trực tiếp mà không cần chuyển đổi.

String.trim() và Swift.trimmed

Trong 99% trường hợp khi tôi cắt Chuỗi trong Swift, tôi muốn xóa khoảng trắng và các ký hiệu tương tự khác (ví dụ: các dòng và tab mới).

Tiện ích mở rộng đơn giản này thực hiện thủ thuật:

Sử dụng:

Int.toDouble() và Double.toInt()

Các phương pháp này có thể hữu ích nếu bạn làm việc với các tùy chọn. Nếu bạn có không tùy chọn Int, bạn có thể chuyển đổi nó với Double(a), trong đó “a” là một biến số nguyên. Nhưng nếu “a” là tùy chọn, bạn không thể làm điều đó.

Hãy thêm tiện ích mở rộng vào Int và Double:

Sử dụng:

String.toDate(…) và Date.toString(…)

Lấy Datetừ String và định dạng Date để hiển thị hoặc gửi tới API là những công việc phổ biến. Cách chuyển đổi tiêu chuẩn cần ba dòng mã. Hãy xem cách làm cho nó ngắn hơn:

Sử dụng:

Int.centsToDollars ()

Một số API thanh toán (ví dụ: Stripe ) thích sử dụng đơn vị tiền tệ (xu) để xử lý thanh toán. Nó cho phép tránh sự không chính xác của Floatvà Double. Đồng thời, sẽ thoải mái hơn khi sử dụng các loại này để hiển thị giá trị.

Tiện ích mở rộng này thực hiện chuyển đổi này:

Sử dụng:

String.asCoferences()

Tọa độ của một địa điểm trên Trái đất có ít nhất hai số – vĩ độ và kinh độ. Một cái khác là độ cao, nhưng điều đó chỉ có ý nghĩa trong không gian 3D, điều này không phổ biến lắm trong phát triển phần mềm.

Từ API, chúng tôi nhận được hai trường riêng biệt hoặc một trường có các giá trị được phân tách bằng dấu phẩy. Phần mở rộng này cho phép thực hiện chuyển đổi các chuỗi như vậy thành CLLocationCoordinate2D.

Sử dụng:

String.asURL()

iOS và macOS sử dụng URL loại để xử lý các liên kết. Nó linh hoạt hơn, cho phép lấy các thành phần và xử lý các loại URL khác nhau. Đồng thời, chúng tôi thường nhập nó hoặc lấy nó từ API String.
Khá dễ dàng để chuyển đổi một thành một khác, nhưng tiện ích mở rộng này cho phép chúng tôi xử lý các tùy chọn hoặc chuỗi chuyển đổi này:

Sử dụng:

UIDevice.vibrate()

Rung của iPhone có thể là một hiệu ứng tuyệt vời cho các lần nhấn nút và các phản hồi khác từ thiết bị. Đối với rung iPhone, có một loại âm thanh đặc biệt, được xử lý bởi AudioToolboxkhuôn khổ.

Đối AudioToolboxvới tất cả các UIViewControllers có rung là điều khó chịu và về mặt logic, rung là một chức năng của thiết bị (nó không đến từ loa mà từ chính thiết bị) hơn là phát âm thanh.

Phần mở rộng này cho phép đơn giản hóa nó thành một dòng:

Sử dụng:

String.width(…) và String.height(…)

iOS có thể UILabeltự động tính toán kích thước bằng cách sử dụng các ràng buộc được cung cấp, nhưng đôi khi điều quan trọng là bạn phải tự đặt kích thước.

Phần mở rộng này cho phép chúng tôi tính toán Stringchiều rộng và chiều cao bằng cách sử dụng UIFont:

Sử dụng:

String.containsOnlyDigits

Phần mở rộng bên dưới hữu ích khi bạn cần giới hạn đầu vào của người dùng hoặc xác thực dữ liệu từ API. Nó kiểm tra nếu Stringchỉ có các chữ số:

Sử dụng:

String.isAlphanumeric

Giống như phần mở rộng trước đó, phần mở rộng này kiểm tra nội dung của String. Nó trả về true nếu chuỗi không trống và chỉ chứa các ký tự chữ và số. Một phiên bản đảo ngược của tiện ích mở rộng này có thể hữu ích để xác nhận rằng mật khẩu có các ký tự không phải chữ và số.

Sử dụng:

Đăng ký chuỗi

Swift 5 có một cách đăng ký String. Việc tính toán các chỉ số và hiệu số rất khó chịu nếu bạn muốn lấy các ký tự từ 5 đến 10. Phần mở rộng này cho phép sử dụng Int đơn giản cho mục đích này:

Sử dụng:

UIImage.squared

Khi bạn yêu cầu người dùng chụp ảnh của họ hoặc chọn ảnh hiện có làm ảnh hồ sơ, họ sẽ khó cung cấp ảnh vuông. Đồng thời, hầu hết các giao diện người dùng sử dụng hình vuông hoặc hình tròn.
Phần mở rộng này cắt những thứ được cung cấp UIImage, biến nó thành một hình vuông hoàn hảo:

Sử dụng:

UIImage.resize(…)

Trước khi tải ảnh lên máy chủ, bạn phải đảm bảo rằng ảnh có kích thước đủ nhỏ. iPhone và iPad có máy ảnh rất tốt và ảnh từ thư viện của chúng có kích thước không giới hạn.
Để đảm bảo UIImagekích thước đó không lớn hơn một kích thước nhất định, ví dụ: 512 pixel hoặc 1024 pixel, hãy sử dụng tiện ích mở rộng này:

Sử dụng:

Hai phần mở rộng cuối cùng có thể được xâu chuỗi:

Int.toString()

Một trong những tính năng hữu ích nhất của Java là toString() phương thức. Đó là một phương thức của tất cả các lớp và kiểu. Swift cho phép làm điều gì đó tương tự như sử dụng chuỗi suy: “(someVar)”. Nhưng có một sự khác biệt – biến của bạn là tùy chọn. Swift sẽ thêm từ optionalvào đầu ra. Java sẽ chỉ gặp sự cố, nhưng Kotlin sẽ xử lý các tùy chọn một cách tốt đẹp: someVar?.toString()sẽ trả về một Chuỗi tùy chọn, là null( nil) nếu someVarlà null( nil) hoặc Stringchứa giá trị varkhác.

Thật không may, Swift không cho phép mở rộng Any, vì vậy hãy thêm toString()phương thức ít nhất vào Int:

Sử dụng:

Double.toString()

Như trong ví dụ trước, chuyển đổi Double thành String có thể rất hữu ích. Nhưng trong trường hợp này, chúng tôi sẽ giới hạn đầu ra với hai chữ số phân số. Tôi không thể nói tiện ích mở rộng này sẽ hữu ích cho mọi trường hợp, nhưng đối với hầu hết các trường hợp sử dụng, nó sẽ hoạt động tốt:

Sử dụng:

Double.toPrice()

Tạo Strings với giá chỉ là một cách khác để định dạng Doubles. Thuật toán này không phổ biến, nó phụ thuộc vào cài đặt khu vực. Nhưng bạn có thể sử dụng nó như một ý tưởng chung và thực hiện các điều chỉnh cho ứng dụng của mình:

Sử dụng:

String.asDict

JSON là một định dạng phổ biến để trao đổi hoặc lưu trữ dữ liệu có cấu trúc. Hầu hết các API thích sử dụng JSON. JSON là một cấu trúc JavaScript. Swift có cùng kiểu dữ liệu – từ điển.

Chuyển đổi một thành một thủ thuật khá đơn giản:

Sử dụng:

String.asArray

Phần mở rộng này tương tự như phần mở rộng trước đó, nhưng nó chuyển đổi mảng JSON thành một mảng Swift:

Sử dụng:

String.asAttributedString

Đôi khi chúng ta cần một số kiểu đơn giản độc lập với nền tảng cho văn bản. Một cách khá phổ biến là sử dụng HTML đơn giản cho mục đích này.

UILabelcó thể hiển thị văn bản với các phần in đậm ( <strong>), văn bản được gạch chân, các đoạn lớn hơn và nhỏ hơn, v.v. Bạn chỉ cần chuyển đổi HTML sang NSAttributedStringvà gán nó cho UILabel.attributedText.

Tiện ích mở rộng này sẽ giúp bạn thực hiện nhiệm vụ đầu tiên:

Sử dụng:

Bundle.appVersion

Phần mở rộng cuối cùng trong tập hợp này cho phép lấy phiên bản ứng dụng từ tệp Info.plist . Nó có thể hữu ích cho:

  • Gửi phiên bản ứng dụng tới API.
  • Kiểm tra các bản cập nhật có sẵn.
  • Hiển thị phiên bản ứng dụng trên màn hình thiết bị.
  • Đưa phiên bản ứng dụng vào email hỗ trợ.
    Tiện ích mở rộng bên dưới cho phép bạn tải phiên bản ứng dụng (hoặc nil nếu nó không có sẵn) trong một dòng mã:

Sử dụng:

Phần kết luận

Tôi hy vọng những tiện ích mở rộng này đã giúp bạn làm cho mã của mình ngắn hơn và rõ ràng hơn. Vui lòng sửa đổi chúng để đáp ứng yêu cầu của bạn và đưa chúng vào các dự án của bạn.

Link bài viết tham khảo: https://medium.com/better-programming/24-swift-extensions-for-cleaner-code-41e250c9c4c3?fbclid=IwAR1KzYlRt0MzLbF-QlFQGyy-Fsiga1DCnKsMQuGoCvf2gnaS530nMA1Y7eM

Chúc bạn vui vẻ và hẹn gặp lại bạn lần sau!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo