Sử dụng NSTimer trong swift

Chào các bạn, trong bài viết này chúng ta sẽ cùng nha tìm hiểu về NSTimer trong Swift bằng cách xây dựng một ứng dụng đếm số nhị phân (Binary Counter)

Đầu tiên chúng ta sẽ xem qua 1 chút về các thành phần sẽ sử dụng trong project:

NSTimer

Về cơ bản thì một timer sẽ thực thi vài dòng lệnh sau một khoảng thời gian nhất định do chúng ta quy định. Một đối tượng timer sẽ chờ 1 khoảng thời gian được xác định trước. Cho tới thời điểm đó, nó sẽ bắn một message tới target object mà nó liên kết (associated).

Để có thể thực sự hiểu về các timer thì bạn nên tìm hiểu thêm 1 chút về NSRunLoop

NSRunLoop

Mỗi ứng dụng iOS sẽ tạo ra ít nhất một đối tượng NSThread (Main Thread) đảm nhiệm vai trò thực thi các dòng lệnh của ứng dụng. Mỗi đối tượng NSThread có một liên kết với NSRunLoop để quản lý các đầu vào như là chuột, bàn phím, touches, connections và cả timers (đoạn này là kiến thức chung cho cả OSX)

NSRunLoop liên tục thực hiện các vòng lặp cho việc kiểm tra các các "input events". Một trong các sự kiện (events) nó kiểm tra chính là timer interval elapsed event. Khi mà một vòng chạy phát hiện sự kiện này, nó sẽ thực hiện method được gắn với timer.

Timer không làm việc là real-time. Lý do là NSRunLoop có thể dành nhiều thời gian hơn timer interval ở các mode khác nên sự kiện timer có thể sẽ bị delay.

Bộ đếm nhị phân

Sau khi có một số kiến thức cơ bản, chúng ta sẽ bắt tay vào xây dựng ứng dụng

Bước 1: Khởi tạo Project

Hãy taọ một ứng dụng mới với Single View Application với ngôn ngữ là Swift: Single View Application.png Swift.png

Bước 2: Khởi tạo UI

Mở Main.storyboard Kéo một đối tượng UILabel và hai đối tượng UIButton vào và đặt tên Start cho button thứ nhất và Reset cho button thứ hai UI.png

Bước 3: Tạo các outlets và actions

outletandaction.png

Bước 4: Thêm đối tượng NSTimer

Bên dưới IBOutlet của label, tạo thêm 2 biến timerbinaryCount addvar.png Ở Swift, số có thể được biểu diễn bởi nhiều định dạng bằng cách thêm các tiền tố khác nhau, ví dụ: 0b cho binary, 0o cho octal và 0x cho hexadecimal. Ví dụ 0b0011 biểu diễn cho số 3 nhị phân.

Bây giờ chúng ta sẽ tạo ra một đối tượng NSTimer gọi đến function countUp sau mỗi 1s timer.png

Tiếp theo chúng ta sẽ viết function countUp() và helper function để update label Screen Shot 2015-10-28 at 01.48.12.png

Cuối cùng, chúng ta sẽ viết function khi chạm vào nút Reset Screen Shot 2015-10-28 at 01.51.11.png Để stop timer, chúng ta phải gọi method invalidate(). Sau khi method này được thực thi, timer sẽ trở thành "invalid" và không có cách nào để start lại. Nếu bạn muốn start, chúng ta phải tạo 1 instance mới của NSTimer như trong startButtonAction

Như vậy bạn đã tạo xong 1 ứng dụng nhỏ thực hiện cho việc demo về NSTimer, hi vọng các bạn sẽ hiểu hơn về NSTimer cũng như NSRunLoop qua ví dụ nhỏ này. Phần code của bài này khá đơn giản và mình đã up ảnh đầy đủ. Mục đích muốn các bạn tự gõ lại vì chỉ khi tự tay gõ lại các bạn sẽ hiểu hơn và nhớ hơn là việc copy và paste 😃


All Rights Reserved