2016-09-28 70 views
7

我最近被迫升級到Swift 3.0,看起來Xcode的轉換並沒有很好的工作。幸運的是,我能夠手動解決大部分問題,但是,有一點讓我感到困惑。這是否重寫該方法?

此行推翻在uiController的canBecomeFirstResponder方法之前升級到雨燕3.0的工作:

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

不過,現在返回錯誤:

Method does not override any method from its superclass.

但是,移除override位沒有按似乎沒有解決它,因爲它引發了一個與前一個不同的錯誤:

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

實際上是否有重寫發生?爲什麼Xcode在這裏給我提供混合信息?

作爲參考,我已經看過this question,雖然它非常相似,但它是關於一個類的,這是關於一種方法。爲了安全起見,我做了嘗試使用該問題的解決方案,它進一步打破了事情,並提出了相同的錯誤。

回答

22

canBecomeFirstResponder已從Swift 2.2中的方法更改爲Swift 3.0中的屬性。這意味着你必須改變你的代碼來覆蓋它作爲屬性而不是方法。

override var canBecomeFirstResponder: Bool { return true } 
2

快速教程,瞭解自己:

  • 馬克/選擇/高亮canBecomeFirstResponder
  • ⌘C
  • ⇧⌘0(零不是O)得到的文檔窗口。
  • ⌘V
  • (返程)

現在你會看到聲明

var canBecomeFirstResponder: Bool { get } 

你看到區別?

+1

道歉爲問一個愚蠢的問題,但你是什麼意思的「標記」呢? – Vemonus

+0

我的意思是選擇/突出顯示它。 – vadian

+0

快速教程:選擇後,您必須按⌘C或選擇編輯>複製將其複製到您的剪貼板,如果您想以後粘貼它。 –

相關問題