XCode 6のこのコードにはエラーはありませんが、XCode 7(Swift 2)ではこのエラーが発生しています。
メソッドはスーパークラスのメソッドをオーバーライドしません
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
}
override
Wordを削除すると、このエラーが発生しました:
Objective-Cセレクター 'touchesBegan:withEvent:'を使用するメソッド 'touchesBegan(:withEvent :)'は、同じObjective-Cセレクターを持つスーパークラス 'UIResponder'のメソッド 'touchesBegan(:withEvent :)'と競合します
Cocoa Touchの多くがObjective-Cジェネリックをサポートするために監査されているため、最初のエラーが発生しています。つまり、配列やセットなどの要素を入力できるようになりました。この結果、このメソッドのシグネチャが変更され、記述した内容がこれと一致しなくなったため、メソッドをoverride
としてマークしたことを説明するエラーが表示されますが、 tは実際にスーパークラスのメソッドに一致します。
次に、override
キーワードを削除すると、実際のtouches beginメソッドとObjective-Cセレクターが競合するメソッドを作成したことを通知します(Swift、Objective- Cはメソッドのオーバーロードをサポートしていません)。
一番下の行は、Swift 2で、タッチがオーバーライドを開始すると、このようになります。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
// stuff
}
Objective-CジェネリックのSwiftコードに対する意味については、プレリリース版の sing Swift CocoaおよびObjective-Cを使用 。現在33ページおよび34ページ。
オーバーライドを削除するだけで機能します。
func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
}