Tôi đã đọc: Collection Accessor Patterns for To-Many Properties, nhưng tôi không chắc mình có thể hoặc nên sử dụng ở đâu. Có thể ai đó vui lòng chỉ ra một số tình huống mà tôi có thể sử dụng Collection Accessor Patterns for To-Many Properties
để làm cho mã của tôi tốt hơn hoặc làm cho mã của tôi viết dễ dàng hơn?Objective-c KVC: Bộ sưu tập mẫu Accessor dành cho nhiều thuộc tính, làm thế nào tôi có thể sử dụng nó để nâng cao mã của tôi?
Trả lời
Mẫu truy nhập bộ sưu tập mà bạn đang đọc về cải thiện cách mã hóa giá trị khóa hoạt động với bộ sưu tập như NSArray, NSDictionary, v.v. Nếu bạn triển khai chúng trong lớp của riêng bạn, lớp học của bạn có thể được sử dụng với KVC các lớp học. Ví dụ: có thể bạn có một lớp học Flight
chứa danh sách Passenger
. Nhưng có lẽ những hành khách đó không được lưu trữ trong một NSArray, nhưng được lấy từ một cơ sở dữ liệu hoặc một cái gì đó. Nếu bạn thực hiện các phương pháp sau:
-countOfPassengers
-passengersAtIndexes:
-getPassengers:range:
sau đó mã sử dụng lớp học của bạn có thể sử dụng KVC để truy cập một cách hiệu quả trong danh sách hành khách. Ví dụ, bạn có thể nhận được một danh sách các hành khách thường xuyên số tờ (giả sử Passenger
có một tài sản như vậy) như thế này:
NSArray *frequentFlyerNumbers = someFlight.passengers.frequentFlyerNumbers;
Đó là công cụ khá tiện dụng - giúp bạn tiết kiệm từ việc phải lặp qua các bộ sưu tập và thu thập tất cả những tự mình. Nếu bạn không biết rằng bạn có thể làm điều đó với các bộ sưu tập tiêu chuẩn như NSArray, điều này có vẻ đáng ngạc nhiên, vì vậy hãy dành một phút để hấp thụ phần đó trước và sau đó xem xét việc thực hiện một vài phương pháp đơn giản mà bạn đã làm tương tự của riêng bạn Flight
lớp học. Nó khá thú vị khi nó hoạt động mặc dù việc lưu trữ hành khách hoàn toàn nằm trong lớp của bạn.
Bây giờ, các phương pháp trên chỉ thu khí bìa, nhưng bạn có thể làm tương tự cho setters bằng cách thực hiện:
-insertPassengers:atIndexes:
-removePassengersAtIndexes:
-replacePassengersAtIndexes:withPassengers:
Bây giờ, một lần nữa, bạn mã có thể thêm và xóa hành khách khỏi chuyến bay bằng KVC:
[someFlight replacePassengersAtIndexes:bumpedPassengerIndexes
withPassengers:passengersFromLateConnectingFlight];
Có các bộ tiếp cận KVC khác mà bạn có thể thực hiện, nhưng tôi không nghĩ rằng tôi cần liệt kê tất cả cho bạn vì chúng ở ngay trong bài viết mà bạn đã liên kết. Vấn đề là mã hóa giá trị khóa là công cụ hữu ích được sử dụng ở một số địa điểm, và bằng cách thực hiện một số ít các phương thức bạn có thể làm cho các lớp của riêng bạn tuân thủ KVC.
Có một số trường hợp thực sự tiện dụng! Dưới đây là một số ví dụ tự giải thích.
Giả sử bạn có một mảng giá bán cho cùng một mặt hàng và muốn biết giá trung bình.
NSNumber *averagePrice = [salesPrices valueForKeyPath:@"@avg.self"];
Nếu phương pháp này phức tạp hơn thì vẫn đáng ngạc nhiên ngắn gọn và thanh lịch. Giả sử bạn có một mảng giao dịch của các từ điển, mỗi từ điển có một "đối tượng" và "giá" chính. Bạn muốn tổng doanh thu cho táo.
NSArray *apples = [transactions filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"object = %@", @"apple"]];
NSNumber *totalApplesSales = [apples valueForKeyPath:@"@sum.price"];
Cũng vui lòng xem các ví dụ được đưa ra trong Hướng dẫn lập trình mã hóa giá trị khóa. Chúng cũng rất minh họa.
Không sai, nhưng OP hỏi về các mẫu truy nhập bộ sưu tập trong khi câu trả lời của bạn dường như bao gồm các toán tử thu thập như '@ avg' và' @ sum'. Chúng không giống nhau. – Caleb
Để thêm vào điều này. Việc áp dụng chúng trong API lớp học của bạn cho phép lớp học của bạn tận dụng lợi thế của các hành vi mã hóa chung được thiết lập tương tự trong các bộ sưu tập Foundation.
Một ví dụ hữu ích sẽ là bộ sưu tập không có thứ tự. Bạn có thể thực hiện điều này để tất cả các thuộc tính công khai của lớp của bạn có thể truy cập được vì nó là một từ điển. allKeys sẽ trả về tên thuộc tính. allValues sẽ trả về giá trị của các thuộc tính đó. instanceOfYourClass [aPropertyName] sẽ trả lại thuộc tính aPropertyName
Điều này sẽ cho phép lặp lại nhanh chóng và nội tâm. Việc thực hiện sẽ mất một số nỗ lực nhưng sẽ làm cho một lớp phù hợp độc đáo với KVC và KVO và thêm khả năng làm những điều đơn giản và thông minh với các ràng buộc là tốt.
- 1. Tôi có thể sử dụng bộ khởi tạo bộ sưu tập cho Thuộc tính không?
- 2. Tôi nên sử dụng loại bộ sưu tập nào?
- 3. Làm cách nào để viết trình vòng lặp của riêng tôi cho thuộc tính bộ sưu tập của thuộc tính (với kiểu nhập chính xác)?
- 4. Rabl Bộ sưu tập nhiều mẫu
- 5. Làm thế nào tôi có thể làm phân trang với bộ sưu tập @OneToMany
- 6. Tôi làm cách nào để tìm hiểu cách sử dụng bộ sưu tập commons Java?
- 7. Làm cách nào để sử dụng DomainContext.Load để điền các thuộc tính của ViewModel của tôi?
- 8. Tại sao ứng dụng của tôi sử dụng nhiều bộ nhớ hơn sau khi tôi nén nó với UPX và tôi có thể làm gì với nó?
- 9. Sử dụng: bộ sưu tập và: include_blank trong Formtastic. Làm thế nào để làm nó?
- 10. Làm thế nào tôi có thể làm cho R tận dụng lợi thế của một bộ nhớ cao, máy chủ cpu cao?
- 11. C bộ sưu tập # thuộc tính
- 12. Sắp xếp bộ sưu tập trong bộ sưu tập bằng cách sử dụng LINQ
- 13. BackboneJs: làm thế nào để tôi bootstrap dữ liệu của tôi trong đánh dấu trang, và khi nào tôi gán chúng vào bộ sưu tập của tôi
- 14. Sử dụng AngularJS làm cách nào tôi có thể ngẫu nhiên hóa thứ tự của một bộ sưu tập?
- 15. Tôi có thể chia bộ sưu tập PL/SQL không?
- 16. Tôi có thể đặt thuộc tính `thuộc tính` của` UILabel`
- 17. Làm cách nào để tôi có thể xóa một bộ sưu tập là một phần của thực thể jpa?
- 18. Bộ sưu tập Magento không chọn thuộc tính
- 19. Return Thuộc tính cho Bộ sưu tập từ LINQ Query
- 20. Làm thế nào để sử dụng NHibernate Projections để lấy một bộ sưu tập
- 21. Tôi nên sử dụng giao diện bộ sưu tập nào trong .NET cho COM-interop?
- 22. Làm thế nào tôi có thể sử dụng ORM Django trong ứng dụng Tornado của tôi?
- 23. Tôi có thể yêu cầu một thuộc tính được đặt trong bộ sưu tập mongodb không? (không null)
- 24. Làm cách nào tôi có thể gán một thuộc tính cho một thuộc tính
- 25. Làm thế nào tôi có thể tìm thấy loại T trong một bộ sưu tập C# chung của T khi tất cả những gì tôi biết là loại bộ sưu tập?
- 26. Mongoose - nhiều schemas sử dụng bộ sưu tập đơn
- 27. Meteor nơi xác định bộ sưu tập của tôi?
- 28. Bộ sưu tập Backbone.js có nhiều loại
- 29. Tôi có cần afxres.h, nếu tôi không sử dụng MFC? Làm thế nào để xóa nó khỏi tập lệnh .RC?
- 30. Thuộc tính sưu tập có thể quan sát được thay đổi trên mục trong bộ sưu tập
câu trả lời hay hơn , cảm ơn bạn. – CarmeloS