2015-05-27 19 views

Trả lời

11

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.

-2

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ì.

+0

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

+3

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. –

10

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 đó.

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