2015-02-11 33 views
11

Tôi không biết liệu điều này có thể xảy ra hay không, nhưng nó sẽ giúp tôi tiết kiệm rất nhiều căng thẳng và mã xấu. Có thể giám sát bất cứ khi nào một mảng được cập nhật không? Ví dụ: phương pháp A thay đổi mảng a=[1,2,3] thành a=[1,2,3,4], có thể có một loại đại biểu được kích hoạt khi a được cập nhật không?Theo dõi các thay đổi đối với đối tượng mảng

+0

Tại sao không thực hiện giao thức riêng của bạn quan sát và làm cho các mảng trong câu hỏi phù hợp với điều đó? –

+0

Hoặc làm cho một đối tượng bao bọc, khi cập nhật mảng, gọi một didChangeArray() hoặc lật một bool công cộng mà bạn có thể kiểm tra. –

+0

Đã đến lúc đi ngủ ở đây. Tôi sẽ cung cấp cho nó vào ngày mai (trừ khi có ai đó đưa ra một ý tưởng thông minh) –

Trả lời

20

Nếu mảng của bạn là thuộc tính trong lớp học, bạn có thể sử dụng trình quan sát thuộc tính. willSet được gọi trước khi thay đổi, didSet được gọi sau. Nó thực sự dễ dàng.

var myArray:[Int] = [1, 3, 4] { 
    didSet { 
     println("arrayChanged") 
    } 
} 

này sẽ in mảng thay đổi nếu tôi thêm một Int, loại bỏ và Int, vv Tôi thường đặt nó trên một dòng mặc dù:

var myArray:[Int] = [1, 3, 4] { didSet { println("arrayChanged") } } 
+0

Chính xác những gì tôi đang tìm kiếm, cảm ơn bạn. –

+0

Cảm ơn bạn, nó rất hữu ích –

+6

Có cách nào để theo dõi các thay đổi mảng nội bộ không? Giống như myArray.append (x)? –

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