問題タブ [swift-extensions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
264 参照

cocoa - Swift の楽しみと新しい制御構造のために Bool を拡張する

私はSwift拡張機能をいじっていて、Boolを拡張しようとしているときに奇妙なバグに頭をぶつけました:

boolean何らかの理由で、式が になった後でもループが続くだけtrueです。

何が起こっているのでしょうか?

0 投票する
1 に答える
236 参照

swift - Swift ジェネリック型推論拡張機能

Array クラスの Min および Max 拡張機能を作成することで、Swift の Generics の理解を深めようとしています (C# の Min および Max Extension メソッドに似ています)。これを行うためのより良い方法があるかもしれませんが、私が言ったように、ジェネリックを理解するのに役立つだけです.

次のコードを作成しました。

テストするために、基本的な Person クラスを作成しました。

私がクロージャーで明示的である場合、これらのケースではうまくいくようです:

ただし、極端な省略形を使用するための型を推測することはできません。

または中程度の長さ:

誰かがこれについてまだ専門家である場合、私が間違っていることを教えてもらえますか? ここまでたどり着くのにかなりの読書とハッキングが必要だったことを認めなければなりません!

返信ありがとうございます

0 投票する
2 に答える
678 参照

string - Swiftは、別の文字列内の部分文字列のインデックスを与えるメソッドがあります

別の文字列内の部分文字列のインデックスを検索する既存の関数はありますか? .indexOfSubstringthankのようなメソッドはこれを行います:

と印刷:

0 投票する
6 に答える
62024 参照

objective-c - Objective-C コードは Swift クラス拡張を呼び出すことができますか?

いくつかの投稿を検索しましたが、Swift で拡張機能を記述して、Objective-C コードから呼び出すことはできないと思いますよね?

@objc同様の属性は、メソッド、クラス、プロトコルのみをサポートしますか?

0 投票する
2 に答える
22326 参照

swift - Swift の拡張機能間でオーバーライドできますか? (コンパイラは混乱しているようです!)

私は Swift で iOS アプリケーションに取り組んできました (その多くは Objective-C から移動されています)。Core Data を使用しており、拡張機能を使用して、モデルから自動生成されたクラスに機能を追加しようとしています。私が Objective-C ですぐに実行したことの 1 つは、クラス A のカテゴリにメソッドを追加し、(A から派生した) クラス B のカテゴリでそのメソッドをオーバーライドすることでした。Swift でも同じことをしたいと思っていました。

しばらくの間、プロジェクトに次のコードがありました (これは 1 つの例にすぎません)。この機能はまだ使用していませんが、コンパイラはこのコードをコンパイルするのに問題なく動作しました。

うまくいけば、親切なSwiftの専門家が私の問題をすでに見ていますが、私がそれを見つけた方法は次のとおりです。最近、組み込み型ではないパラメーターや戻り値を持つメソッドを使用して同様の機能を追加しようとしましたが、これを取得し始めましたエラー: 拡張機能の宣言はまだオーバーライドできません。

この問題を調査するために、問題なくコンパイルできると考えて、swift ファイルの 1 つに以下を追加しました。

驚いたことに、同じコンパイラ エラーが発生しました (拡張機能の宣言はまだオーバーライドできません)。何?しかし、私はそのパターンをコンパイラエラーなしですでに数回使用しました。

質問: まず、拡張機能のオーバーライドに関して、ある場合には機能するはずであるが他の場合には機能しないという特定の規則はありますか? 2 つ目 (さらに当惑させられること) は、なぜ Swift コンパイラがそれほど一貫性を欠いているように見えるのでしょうか? ここで何が欠けていますか?Swift への信頼を取り戻すのを手伝ってください。

アップデート:

Martin R の正解に記載されているように、(1) NSObject から派生したクラスのみを含み、(2) inout を使用しない限り、現在のバージョンの Swift (Xcode 6.1 経由の 1.1) のメソッドをオーバーライドできるようです。修飾子。以下にいくつかの例を示します。