[解決済み】コンパイラーエラー。Objective-C のセレクタを持つメソッドは、同じ Objective-C セレクタを持つ以前の宣言と競合しています。
質問
私はSwiftを学び始めており、YouTubeで非常に良いスタンフォード大学のビデオ講義を追っています。ここに、もしあなたが興味を持ったり、それが役に立ったりするならば、リンクがあります(私の問題を理解するのに必要ではありませんが)。
SwiftでiOS 8アプリを開発する - 2.もっと知りたいXcodeとSwift、MVC
講義を受けながら、自分のコードはビデオのコードと同じなのに、私のシステムではコンパイラーエラーが出るという事態に陥りました(わかる範囲では)。試行錯誤の末、コードを2つの例に絞り、片方はエラーを発生させ、もう片方は発生させないようにしましたが、実際に何が原因でエラーが発生しているのか、どのように解決すればいいのかが全く分かりません。
エラーを発生させるコードは
import UIKit
class BugViewController: UIViewController
{
func perform(operation: (Double) -> Double) {
}
func perform(operation: (Double, Double) -> Double) {
}
}
これは以下のようなコンパイラーエラーを発生させます。
メソッド 'perform' に Objective-C セレクタ 'perform: ' は、同じ Objective-C セレクタを持つ以前の宣言と競合します。
UIViewControllerのサブクラス化を取り除くだけで、コードはコンパイルされます。
import UIKit
class BugViewController
{
func perform(operation: (Double) -> Double) {
}
func perform(operation: (Double, Double) -> Double) {
}
}
その他、関連性の有無にかかわらず、いくつかの情報を提供します。
- 最近Yosemiteにアップグレードしました。
- Xcodeをインストールしたとき、(私の記憶が正しければ)これが私のバージョンのOS Xで実行するために必要なバージョンだったので、結局ベータ版(Version 6.3 (6D543q))にしました。
そうでなければ意味がないので、これはコンパイラのバグであることを半分願っています。何か助かる方法があれば、ぜひ教えてください。
解決方法は?
Objective-Cはメソッドのオーバーロードをサポートしていませんので、別のメソッド名を使用する必要があります。UIViewControllerを継承した時点でNSObjectを継承し、Obj-Cと相互運用可能なクラスにしています。一方、Swiftはオーバーロードをサポートしているので、継承を解除しても動作するわけです。
関連
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
[解決済み] なぜswiftではアンダースコアが必要なのですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swiftベースのアプリケーションは、OS X 10.9/iOS 7以下でも動作しますか?
-
[解決済み】SwiftでFloatをIntに変換する。
-
[解決済み】Xcode 8 Beta 3 Legacy Swiftを使用する問題
-
[解決済み] Swift 5.1 でコンパイルしたモジュールを Swift 5.1.2 のコンパイラでインポートできない
-
[解決済み] Obj-CでSwiftのEnumを使用することは可能ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift 5でXOR?
-
[解決済み] Error: this class is not key value coding-compliant for key tableView.' [重複] を修正する方法。
-
[解決済み] Swift stdlib ツール エラー
-
[解決済み] SwiftUIのFacebookログイン。FacebookのIDをビューに戻すには?
-
[解決済み] SwiftでString.Indexはどのように動作するのか
-
[解決済み】Swift 4でStringのsubstringを使うには?'substring(to:)'は非推奨です。部分的な範囲から'演算子を持つ文字列スライス添字を使用してください。
-
[解決済み】swift 4でenumをDecodableにするにはどうすればいいですか?
-
[解決済み】iOS8でSwiftを使用して特定のViewControllerのステータスバーの色を変更する。
-
[解決済み】コンパイラーエラー。Objective-C のセレクタを持つメソッドは、同じ Objective-C セレクタを持つ以前の宣言と競合しています。
-
[解決済み】UIViewControllerの最上位機種を取得する。