Khi xác định IBAction, có một tùy chọn cho Anyobject và UIButton, cả hai đều hoạt động, sự khác biệt là gì?Sự khác biệt giữa AnyObject và UIbutton là người gửi là gì?
Trả lời
Có, cả hai đều hoạt động. Sự khác biệt chỉ là bằng cách khai báo nó vào một nút, bạn sẽ nhận được một tham chiếu được định kiểu là UIButton thay vì AnyObject (hoặc id trong Objective-C). Nếu bạn không làm điều đó, bạn sẽ phải làm điều đó bằng tay bên trong mã.
Bạn nên để nó ở AnyObject trong trường hợp hành động có một số mã bạn muốn gọi từ bất kỳ nơi nào khác, thay vì chỉ là thao tác nút.
Ví dụ: nút làm mới, bạn có thể phải thực hiện làm mới theo chương trình. Nếu bạn đã thiết lập tham số hành động của bạn để UIButton, bạn phải gửi một UIButton (nhưng tại sao ??? Bạn đang làm nó theo chương trình, phải không?). Trong khi nếu nó là AnyObject, bạn có thể gửi 'self'. Mà cũng sẽ làm cho bạn phân biệt liệu việc làm mới được thực hiện trên hành động hay lập trình.
Hy vọng điều đó sẽ giải thích. Xin lỗi vì không có mã. Tôi không viết mã Swift nhiều. Chỉnh sửa được hoan nghênh.
EDIT
Vì vậy, ngay cả khi nó là AnyObject, nó có đặc tính UIButton của bạn. Chỉ cần gõ cast nó để sử dụng chúng.
Nếu đó là anyObject, thì nó không có bất kỳ thuộc tính nào của UIButton. Khi bạn nhấp vào nút và IBAction kích hoạt, người gửi sẽ chứa thông tin về điều đã kích hoạt hành động.
Ví dụ: đối với UIButton, bạn có thể truy vấn văn bản của UIButton khi IBAction kích hoạt. Tuy nhiên, trong trường hợp IBAction được kết nối với hai điều khiển giao diện người dùng khác nhau, hãy nói, một nút và một thanh trượt, truy vấn người gửi khi nó thuộc loại UIButton (trong khi yếu tố UI kích hoạt là UISlider) sẽ làm hỏng chương trình. Nếu bạn có AnyObject, bạn sẽ có thể kiểm tra nếu người gửi là UIButton hoặc UISlider, và sau đó làm điều gì đó.
Nói chung, nếu bạn không quan tâm đến người gửi, hãy để trống, vì vậy mọi người đọc mã của bạn sẽ biết rằng bạn không sử dụng người gửi cho bất kỳ điều gì.
Nếu bạn chỉ sử dụng chức năng với UIButton
, cách tốt nhất là khai báo người gửi là UIButton
. Điều này giúp bạn tiết kiệm một chút mã và nó cũng nói với bất cứ ai trong tương lai đọc mã của bạn mà bạn chỉ mong đợi các chức năng được sử dụng với một UIButton
.
Sử dụng AnyObject
sẽ hoạt động nhưng bạn cần phải thực hiện if let button = sender as? UIButton { }
để truy cập dưới dạng nút. Bằng cách này cho phép bạn phản ứng khác nhau tùy thuộc vào những gì người gửi thực sự là, nhưng tôi không khuyên bạn nên làm điều đó.
- 1. sự khác biệt giữa/* ... */và là gì/** ... */
- 2. Sự khác biệt giữa socket.send() và socket.sendall() là gì?
- 3. Sự khác biệt giữa dma_mmap_coherent và remap_pfn_range là gì?
- 4. sự khác biệt giữa RxJava và Bu lông là gì?
- 5. Sự khác biệt giữa Linux và Unix là gì?
- 6. AutoMapper: Sự khác biệt giữa ForMember và ForSourceMember là gì?
- 7. Sự khác biệt giữa :: sau và :: pseudo-elements là gì?
- 8. Sự khác biệt giữa Event.target, Event.toElement và Event.srcElement là gì?
- 9. SBT - Sự khác biệt giữa tên và id là gì?
- 10. Sự khác biệt và trường hợp sử dụng cho va_list, CVaListPointer, AnyObject ..., CVarArgType là gì?
- 11. Sự khác biệt giữa "include_examples" và "it_behaves_like" là gì?
- 12. Sự khác biệt giữa chẩn đoán và metaheuristics là gì?
- 13. Sự khác biệt giữa ASP.NET và ASP.NET MVC là gì?
- 14. Sự khác biệt giữa Push API và Sự kiện máy chủ được gửi là gì?
- 15. Sự khác biệt giữa Generics và AnyObject trong Swift
- 16. Sự khác biệt giữa while (true) và loop là gì?
- 17. Sự kiện UIButton. Có gì khác biệt?
- 18. Sự khác biệt giữa một Người Dự Bị và Người Làm Việc là gì?
- 19. Trên GitHub, sự khác biệt giữa người đánh giá và người được chỉ định là gì?
- 20. Sự khác biệt giữa JavaBean và POJO là gì?
- 21. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 22. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 23. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 24. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 25. Sự khác biệt giữa DBI và DBD là gì?
- 26. Sự khác biệt giữa NSInvocation và chặn là gì?
- 27. Sự khác biệt giữa fn và fn * là gì?
- 28. Sự khác biệt giữa xtype và bí danh là gì?
- 29. Sự khác biệt giữa build.sbt và build.scala là gì?
- 30. Sự khác biệt giữa localname và qname là gì?
Và giống như Paul Hegarty (giáo sư tại Stanford) cho biết, Apple chỉ nên thay đổi nó thành 'UIButton' theo mặc định. Nó chỉ là gây phiền nhiễu phải thay đổi nó tất cả các thời gian bằng tay. – Eendje
Bạn đang hiểu nhầm Kelvin. Bạn không thể nói nó không có các thuộc tính của nút nếu nó là AnyObject. –