2015-07-02 28 views
12

Cách kiểm tra xem NSTimer có đang chạy hay không trong Swift. Trong obj-c mã phải như thế này như tôi đoán:Làm cách nào để kiểm tra xem NSTimer có đang chạy hay không trong Swift?

if (!myTimer) { 
    //DO 
} 

Tôi đang cố gắng đặt nó trong Swift như thế này và nó hiển thị lỗi.

if !myTimer { 
// DO 
} 
+0

Cung cấp tất cả thông tin thích hợp, bao gồm thông báo lỗi đầy đủ thực tế. – zaph

+0

@amro shahbari swift 3.1 không hoạt động –

Trả lời

25

Điều tôi làm (bằng cả hai ngôn ngữ) là làm cho bộ hẹn giờ của tôi yếu. Trong nhanh chóng nó sẽ là một tùy chọn yếu.

weak var myTimer: NSTimer? 

Sau đó, tôi tạo ra một bộ đếm thời gian với

myTimer = NSTimer.scheduledTimerWithTimeInterval(1, 
      target: self, 
      selector: "timerFired:", 
      userInfo: nil, 
      repeats: false) 

Và sau đó bạn có thể sử dụng

if timer == nil 

để nói nếu nó đang chạy.

Để ngừng đồng hồ đếm bạn chỉ cần gọi

myTimer?.invalidate() 

Trong Objective-C nó sẽ là

[myTimer invalidate]; 

đó làm việc trong Objective-C vì gửi tin nhắn đến con trỏ nil là hợp lệ, và chỉ cần thực hiện không có gì.

Nếu bạn không muốn sử dụng tùy chọn yếu, bạn có thể truy vấn bộ hẹn giờ để xem bộ hẹn giờ có đang chạy hay không bằng cách xem thuộc tính valid.

+2

Chỉ vì 'timer' không phải là nil không cho biết nếu nó đang chạy. – zaph

+3

Nó sẽ xảy ra nếu bạn làm cho nó yếu. Sau đó, tham chiếu sở hữu duy nhất là vòng lặp chạy, và sau khi nó được kích hoạt/khi nó bị vô hiệu, nó được giải phóng và không có. Nó rất tiện dụng. –

+0

Không, với con trỏ yếu, \t timerWithTimeInterval: target: selector: userInfo: repeats: tạo bộ đếm thời gian ngay lập tức bị phân phối vì nó có tham chiếu không mạnh mẽ .. Đó là trường hợp thoái hóa. Hãy thử những gì tôi mô tả. Nó hoạt động. Tôi hứa. –

2
if !myTimer.valid { 
    //DO 
} 
+0

Để làm việc này 'myTimer' phải được khai báo là thuộc tính' yếu'. – zaph

+0

@zaph, đó là sai. Đối với phương pháp này, bộ đếm thời gian ** không thể ** được khai báo yếu. –

11

Còn tùy chọn bên dưới? Bạn có thể xem liệu điều này có phù hợp với bạn không

if myTimer.valid { 
} 
+0

Để làm việc này 'myTimer' phải được khai báo là thuộc tính' yếu'. – zaph

+3

@zaph, không. Cách tiếp cận của tôi làm cho nó yếu và kiểm tra công việc nil, HOẶC bạn có thể làm cho nó mạnh mẽ và sau đó kiểm tra xem nếu timer.valid == true. Sử dụng 'myTimer.valid' không ** NOT ** yêu cầu' myTimer' yếu. –

Các vấn đề liên quan