2016-09-28 31 views
7

Gần đây tôi đã bị buộc phải cập nhật lên Swift 3.0 và có vẻ như chuyển đổi của Xcode đã không làm một công việc tuyệt vời. May mắn thay, tôi có thể giải quyết phần lớn các vấn đề theo cách thủ công, tuy nhiên, tôi có một chút bối rối.Phương pháp này có ghi đè phương pháp này hay không?

Dòng này mà gạt các canBecomeFirstResponder phương pháp trong uiController làm việc trước khi nâng cấp lên Swift 3.0:

override func canBecomeFirstResponder() -> Bool { 
    return true 
} 

Tuy nhiên, nó bây giờ trả về lỗi:

Method does not override any method from its superclass.

Tuy nhiên, loại bỏ các override chút doesn dường như không sửa chữa nó, vì nó làm tăng một lỗi khác có vẻ mâu thuẫn với lỗi trước:

Method 'canBecomeFirstResponder()' with Objective-C selector 'canBecomeFirstResponder' conflicts with getter for 'canBecomeFirstResponder' from superclass 'UIResponder' with the same Objective-C selector

Có thực sự xảy ra ghi đè không? Tại sao Xcode cho tôi thông điệp hỗn hợp ở đây?

Để tham khảo, tôi đã xem this question và mặc dù nó rất giống nhau, nó là về một lớp, và đây là về một phương pháp. Để an toàn, tôi đã làm thử sử dụng giải pháp cho câu hỏi đó và nó tiếp tục phá vỡ mọi thứ và nêu ra các lỗi tương tự.

Trả lời

22

canBecomeFirstResponder đã được thay đổi từ phương thức trong Swift 2.2 thành thuộc tính trong Swift 3.0. Điều này có nghĩa là bạn phải thay đổi mã của mình để ghi đè mã đó làm thuộc tính thay vì phương thức.

override var canBecomeFirstResponder: Bool { return true } 
2

nhanh hướng dẫn để tìm hiểu bản thân:

  • Đánh dấu/select/highlight canBecomeFirstResponder
  • Nhấn ⌘C
  • Nhấn ⇧⌘0 (zero không O) để có được cửa sổ tài liệu .
  • Nhấn ⌘V
  • Nhấn (cửa sổ mới)

Bây giờ bạn sẽ thấy những lời tuyên bố

var canBecomeFirstResponder: Bool { get } 

Bạn có thấy sự khác biệt?

+1

Xin lỗi vì đã đặt câu hỏi ngớ ngẩn, nhưng bạn có ý gì bằng cách "đánh dấu" câu hỏi đó? – Vemonus

+0

Tôi muốn chọn/đánh dấu nó. – vadian

+0

Hướng dẫn nhanh: sau khi chọn, bạn phải nhấn ⌘C hoặc chọn Chỉnh sửa> Sao chép để sao chép nó vào khay nhớ tạm của bạn nếu bạn muốn dán sau. –

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