セレクタ 'touchesBegan:withEvent:' を持つメソッドのオーバーライドは、互換性のない型 '(NSSet, UIEvent) -> ()' を持ちます。
質問
Xcode 6.3です。 UITextFieldDelegateプロトコルを実装するクラス内で、私はおそらくキーボードを隠すためにtouchesBegan()メソッドをオーバーライドしたいと思っています。 私が関数仕様のコンパイラーエラーを避けるならば、SetまたはNSSetから"touch"を読もうとするコンパイラーエラーがあるか、またはsuper.touchesBegan(touches , withEvent:event)がエラーをスローする。 これらの組み合わせの1つは、Xcode 6.2でコンパイルされました! (それで、Swift "Set"と1つから要素を取得する方法に関する文書はどこにあるのでしょうか?)
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// Hiding the Keyboard when the User Taps the Background
if let touch = touches.anyObject() as? UITouch {
if nameTF.isFirstResponder() && touch.view != nameTF {
nameTF.resignFirstResponder();
}
}
super.touchesBegan(touches , withEvent:event)
}
試してみてください。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) or
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent)
コンパイラーエラーです。 セレクタ 'touchesBegan:withEvent:' を持つメソッドのオーバーライドは、互換性のない型 '(NSSet, UIEvent) -> ()' を持ちます。 であり
super.touchesBegan(touches , withEvent:event)
も文句を言う
NSSet' は 'Set' に暗黙的に変換できません。'as' を使って明示的に変換するつもりだったのでしょうか?
試してみてください。
override func touchesBegan(touches: Set<AnyObject>, withEvent event: UIEvent)
コンパイラーエラーです。 Type 'AnyObject' does not conform to protocol 'Hashable'.
試してください。
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
でのコンパイラーエラー
if let touch = touches.anyObject() as? UITouch
'Set' は 'anyObject' という名前のメンバを持っていませんが、関数仕様と super() への呼び出しはOKです!
試してみてください。
override func touchesBegan(touches: NSSet<AnyObject>, withEvent event: UIEvent) -> () or
override func touchesBegan(touches: NSSet<NSObject>, withEvent event: UIEvent)
コンパイラーエラーです。 非一般的な型 'NSSet' を特殊化できません。
どのように解決するのですか?
Swift 1.2 (Xcode 6.3)
が導入され、ネイティブの
Set
型が導入されました。
と
NSSet
. このことは
スイフトブログ
で、そして
Xcode 6.3 リリースノート
,
が、どうやらまだ公式ドキュメントには追加されていないようです。
(更新:
Ahmad Ghadiri が指摘したように
は、その
は
を文書化したものです)。
は
UIResponder
というメソッドが宣言されるようになりました。
func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
というように上書きすることができます。
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
if let touch = touches.first as? UITouch {
// ...
}
super.touchesBegan(touches , withEvent:event)
}
Swift 2 (Xcode 7)に対応したアップデートを行いました。 (比較 Swift 2でのfuncのオーバーライドエラー )
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
// ...
}
super.touchesBegan(touches, withEvent:event)
}
Swift 3に対応したアップデートです。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
// ...
}
super.touchesBegan(touches, with: event)
}
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] iOS - UITextFieldの外側をタッチするとキーボードが外れる。
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 文字列の長さを取得する
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。