2017-07-02 17 views
5

Tôi đang tìm thêm một cử chỉ để quan điểm của tôi như sau:Swift 4 add cử chỉ: override vs @objc

override func viewDidLoad() { 
    super.viewDidLoad() 

    < blah blah blah > 

    // Add tap gesture 
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 
    myView.addGestureRecognizer(tap) 
} 

Tuy nhiên, trong Swift 4 trình biên dịch của tôi là đem lại cho tôi những lỗi sau:

Argument of '#selector' refers to instance method 'handleTap()' that is not exposed to Objective-C 

Đề xuất là thêm @objc để hiển thị phương pháp thể hiện này cho Objective-C.

Tùy chọn khác để thực hiện điều này (thông qua mã chỉ) sẽ là ghi đè hàm touchesBegan() và sử dụng chức năng đó để xử lý nhấn.

Tôi đang cố gắng thực hiện điều này theo cách 'Swift' mà không phải mang Obj-C. Có cách nào Swift thuần túy để thêm cử chỉ nhấn này mà không sử dụng @objc không? Hoặc đó là cách bình thường và dự định để thêm cử chỉ nhấn này?

+0

Bản sao có thể có của [Làm cách nào tôi có thể xử lý việc phản đối suy luận @objc với #selector() trong Swift 4?] (Https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc -inference-deprecation-with-selector-in-swift-4) – LinusGeffarth

Trả lời

17

Sử dụng @objc đây là cách thông thường và dự định.

Mã nhận dạng cử chỉ cơ bản được viết trong Mục tiêu-C, do đó bạn cần phải làm cho bộ chọn của bạn có thể gọi từ Mục tiêu-C và đó là tất cả @objc đang hoạt động.

Kỹ thuật thay thế của bạn vẫn đang sử dụng C-API mục tiêu, nhưng tương tác với chúng mà không có bộ chọn để nó chỉ ít hiển thị hơn.

+0

Câu trả lời hay;) Tôi chỉ thêm rằng thay đổi này đã được thực hiện bởi [Đề xuất suy luận @objc giới hạn] (https://github.com/apple/swift -Phiên bản/blob/master/đề xuất/0160-objc-inference.md) trong Swift 4. –