Những thủ thuật cần biết trong lập trình Swift (P6)

Share:

Bỏ lại NSNumber đằng sau

Objective-C sử dụng nên tảng là ngôn ngữ C nguyên thủy cho các số nguyên, và nên tảng của Objective-C API cũng cung cấp NSNumber để nhập vào box hoặc unbox. Chúng ta đã từng code theo kiểu thế này [array addObject:@(intPrimitive)] and [array[0] intValue] khi mà chúng ta cần quay lại phía sau hoặc phía trước giữa các thành phần gốc và kiểu đối tượng. Swift thì lại không tồn tại cơ chế vụng về này. Thay vào đó, chúng ta hoàn toàn có thể thêm các giá trị Int / Float / AnyObject vào thư viện và các mảng của Swift.

Đây là một số các kiểu biến của Swift được sử dụng trong NSNumber:

  • Swift: Objective-C
  • Int: [NSNumber integerValue]
  • Float: [NSNumber floatValue]
  • UInt: [NSNumber unsignedIntegerValue]
  • Double: [NSNumber doubleValue]
  • Bool: [NSNumber boolValue]

Ta cũng sử dụng NSNumber cho việc chuyển đổi giữa các kiểu biến khác nhau trong Objective-C, tuy nhiên trong Swift thì cách cơ bản nhất trong việc chuyển đổi giá trị đó là sử dụng cấu trúc cho các kiểu biến chúng ta đang nhắm tới.  Ví dụ nếu mình có một userId thuần số từ một API, được đóng gói trong một NSNumber và cần được hiển thị userId như là một chuỗi thì trong Objective-C, chúng ta sẽ nhập vào là [userId stringValue]. Swift thì không như vậy bởi nó không sử dụng NSNumber nữa (ngoại trừ việc tương thích ngược với Objective-C), bởi vì cấu trúc thuần số trong Swift sẽ không thể có giới hạn giống như trong Objective-C được.

Khuyến cáo: chúng ta cũng có thể phải làm việc với NSNumber trong các cơ sở của mã nguồn rằng cầu nối giữa Objective-C hay cơ sở mã nguồn đều phụ thuộc vào các thư viện cũ hơn mà không cần phải đóng gói trong Swift. Trong trường hợp này, NSNumber API hầu như không thay đổi.

Thay vì trong Swift, chúng ta thực hiện những chuyển đổi tương đương với các cấu trúc. Ví dụ, nếu userId là một biến Int và chúng ta cần một chuỗi, thì tất cả những gì chúng ta cần làm đơn giản là String(userId) để có thể tạo ra chuyển đổi. Việc làm này rõ là dễ dàng hơn rất nhiều so với việc đóng gói hay mở gói NSNumber nhưng sự đa dạng của các chuyển đổi được cung cấp bởi NSNumber cũng đem lại một API đơn giản một cách tuyệt vời.

Giảm thiểu những đoạn code mẫu với các lập luận nghiễm nhiên

Với Swift, mọi lập luận về chức năng có thể luôn ở giá trị mặc định (nghiễm nhiên). Những lập luận mặc định này sẽ giảm thiểu sự rối rắm của những đoạn code. Nếu như một chức nào chọn cách sử dụng giá trj mặc định, thì chức năng đó sẽ được gọi sớm hơn bởi vì những lập luận mặc định có thể được bỏ qua. Ví dụ:

 

Share:

Leave a reply