2016-03-03 26 views
6

Đây là lớp học của tôi:Làm thế nào để quan sát những thay đổi sở hữu mảng trong RxSwift

class ViewController: UIViewController { 
    var myArray : NSArray! 
} 

Tôi muốn bắn một sự kiện mỗi khi điểm myArray đến một mảng mới, như thế này:

self.myArray = ["a"] 

self.myArray = ["b"] 

tôi đã thử rx_observe nhưng không thành công, dưới đây là mã của tôi:

self.rx_observe(NSArray.self, "myArray").subscribeNext { (array) -> Void in 
    print(array) 
} 

Nó chỉ kích hoạt lần đầu tiên, có vấn đề gì?

Trả lời

11

Hầu hết thời gian, nếu bạn có quyền kiểm soát biến số ủng hộ, bạn muốn sử dụng Variable để sử dụng rx_observe.

class ViewController: UIViewController { 
    var myArray : Variable<NSArray>! 
} 

Lần đầu tiên bạn sẽ sử dụng myArray, bạn sẽ asign nó như vậy

myArray = Variable(["a"]) 

Sau đó, nếu bạn muốn thay đổi giá trị của nó

myArray.value = ["b"] 

Và bạn có thể dễ dàng quan sát thay đổi của nó, sử dụng

myArray.asObservable().subscribeNext { value in 
    // ... 
} 

Nếu bạn thực sự muốn sử dụng rx_observe (có thể do biến được sử dụng ở nơi khác trong chương trình của bạn và bạn không muốn thay đổi API của bộ điều khiển chế độ xem), bạn cần khai báo myArraydynamic (yêu cầu khác là rằng lớp lưu trữ là con của NSObject, tại đây UIViewController đáp ứng yêu cầu này). KVO không được thực thi theo mặc định nhanh chóng và sử dụng động đảm bảo truy cập được thực hiện bằng cách sử dụng thời gian chạy mục tiêu-c, nơi các sự kiện KVO được xử lý.

class ViewController: UIViewController { 
    dynamic var myArray: NSArray! 
} 

Tài liệu này có thể được tìm thấy here

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