- @objc
Suy luận là gì? Chuyện gì đang xảy ra vậy?
Trong Swift 3
, trình biên dịch xâm nhập @objc
vào một số nơi để bạn không phải đến. Nói cách khác, nó chắc chắn để thêm @objc
cho bạn!
Trong Swift 4
, trình biên dịch không còn làm điều này (càng nhiều). Bây giờ bạn phải thêm @objc
một cách rõ ràng.
Theo mặc định, nếu bạn có dự án trước Swift 4, bạn sẽ nhận được cảnh báo về điều này. Trong một dự án Swift 4, bạn sẽ gặp lỗi xây dựng. Điều này được kiểm soát thông qua SWIFT_SWIFT3_OBJC_INFERENCE
cài đặt xây dựng. Trong một dự án trước Swift 4, điều này được đặt thành On
. Tôi khuyên bạn nên đặt cái này thành Default
(hoặc Off
), hiện là tùy chọn mặc định cho một dự án mới.
Sẽ mất một chút thời gian để chuyển đổi mọi thứ, nhưng vì nó là mặc định cho Swift 4, nên đáng để làm điều đó.
- Làm cách nào để dừng cảnh báo / lỗi trình biên dịch?
Có hai cách để chuyển đổi mã của bạn để trình biên dịch không phàn nàn.
Một là sử dụng @objc
trên từng chức năng hoặc biến cần được tiếp xúc với thời gian chạy Objective-C:
@objc func foo() {
}
Khác là để sử dụng @objcMembers
bởi một Class
tuyên bố. Điều này đảm bảo tự động thêm @objc
vào TẤT CẢ các hàm và biến trong lớp. Đây là cách dễ dàng, nhưng nó có chi phí, ví dụ, nó có thể tăng kích thước ứng dụng của bạn bằng cách hiển thị các chức năng không cần phải tiếp xúc.
@objcMembers class Test {
}
- Cái gì @objc
và tại sao cần thiết?
Nếu bạn giới thiệu các phương thức hoặc biến mới cho một lớp Swift, đánh dấu chúng là @objc
hiển thị chúng cho thời gian chạy Objective-C. Điều này là cần thiết khi bạn có mã Objective-C sử dụng lớp Swift của bạn hoặc, nếu bạn đang sử dụng các tính năng loại Objective-C như Selectors
. Ví dụ: mẫu hành động đích:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Tại sao tôi không đánh dấu mọi thứ @objc
?
Có những tiêu cực đi kèm với việc đánh dấu một cái gì đó như @objc
:
- Tăng kích thước nhị phân ứng dụng
- Không có chức năng quá tải
Xin lưu ý rằng đây là một bản tóm tắt cấp cao và nó phức tạp hơn tôi đã viết. Tôi khuyên bạn nên đọc đề xuất thực tế để biết thêm thông tin.
Nguồn: