問題タブ [swift-protocols]

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 投票する
1 に答える
3811 参照

ios - プロトコル実装プロトコルのデフォルト実装

特定のクラスによって実装されるプロトコルを作成しようとしていますが、それらすべても実装する必要がありますUIScrollViewDelegate。私が考えたのは、私の新しいプロトコルがプロトコルを実装することですUIScrollViewDelegate

プロトコルにはデフォルトの実装が必要なので、このプロトコルの拡張機能も作成しました。

コンパイルはできますが、動作しません。私は何を間違っていますか?拡張されたプロトコルのデフォルトの実装を作成する正しい方法は何ですか?

0 投票する
0 に答える
84 参照

swift - Swift パブリック クラス拡張でパブリック メソッド デコレータを回避する

Swift でプロトコルを定義したとします。

次に、同じソース ファイルでクラスを定義します。

次に、同じソース ファイルにMyClass準拠を指定するための拡張子を追加します。MyProtocol

上記のコードを Xcode 7.2 でコンパイルしようとすると、拡張機能の各メソッドにパブリック デコレータを追加する必要があることを示すコンパイラ エラーが表示されます。

上記のようなクラス拡張のすべてのメソッドに注釈を付けるのを避ける方法はありpublicますか?

注: publicfromを削除MyClassすると上記のコンパイル エラーが解消されることはわかっていますが、MyClassそれを使用する Objective-C コードから見えるようにする必要があります。

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

ios - オプションの初期化子による CollectionType の拡張

これは、オブジェクトを作成したいときに機能します

以下を達成しようとしていますが、コンパイル時にエラーが発生しています。

次のコードは、「イニシャライザで許可される唯一の戻り値は nil です」というエラーを表示しています。

================================= 答え: -

これにより、次のコードを使用して初期化できます

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

swift - プロトコルに準拠したプロパティを持つ Swift プロトコル拡張

私はそのようにプロトコルを宣言しました

ここで、JSONSerializable は実際の型ではなく、次のように宣言した別のプロトコルです。

実際、この JSONConnection プロトコルには、JSONSerializable プロトコルに準拠する必要があるだけの jsonRootObject という変数が必要です。

罰金。


さて、実装について。

JSONSerializable プロトコルに準拠する JSONStockDetailRootObject というクラスを作成しました。

そして、JSONConnection プロトコルに準拠する StockConnection クラスを作成したいと考えました。

JSONSerializable プロトコルに準拠したタイプの jsonRootObject 変数があれば、このクラス StockConnection は JSONConnection プロトコルに準拠すると思いましたが、そうではありません。

コンパイラは次のように主張しています。

私は何が欠けていますか?ありがとう

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

swift - CollectionType のインデックス作成とイテレートを迅速に行う

基本的に次のようなコードがあります。

これは問題なく動作しますが、配列を渡したい場合もあれば、ArraySlice を渡したい場合もあります。CollectionType次のように変換されるジェネリックとプロトコルを使用するように変更すると思いました。

ただし、次のコンパイラ エラーが発生します。

そのコンパイルを行うfor ループを切り替えることはできますが、data.indices は抽象を返すのに対し、/ 2 は Int であるfor i in data.indicesため、これを 2 で割って midPoint を取得することはできなくなります。CollectionType.Index

Swiftでこのようなことをすることは可能ですか? 抽象プロトコルのインデックス型と、数学を実行できる実際の型との間を橋渡しできますか?

indicesPS: andを使用してコレクション全体を反復する他の例を見て見つけましたenumerateが、コレクションの半分を明示的に反復したいだけで、ある種の 2 による除算が必要です。

ありがとう

0 投票する
3 に答える
6100 参照

swift - タイプ 'X' の値にはメンバー 'y' がありません - プロトコルのオプション機能

Swift のプロトコルをよりよく理解しようとしています。具体的には、オプションのプロトコル メソッドです。この問題は、プロトコルが別のファイルで定義/使用されていることに関係している可能性があると考えましたが、プレイグラウンドに次のものを配置すると、同じ問題が発生します。

エラーメッセージは次のとおりです。

何らかの理由で、プロトコルが NSObject で定義されていることを受け入れません。コード補完はそれを見つけますが、コンパイラはそれを通過させません。

私の?? true部分が機能するかどうかはわかりませんが、メソッドが定義されていない場合に備えて、それをデフォルト値にしたいと考えています。

これを機能させるにはどうすればよいですか?

0 投票する
3 に答える
2918 参照

swift - Swift プロトコル: 一部のプロパティを非表示にする

trimmedTextと のプロパティを作成したいと思いUITextViewますUITextField。これが私がしたことです:

が as inおよび as inとして宣言されて_textいるため、プロパティが必要です(なぜyyy?! >_<)。ここで、API が煩雑にならないように、このプロパティを非表示にしたいと思います。textString?UITextFieldString!UITextView

これが私が試したことです:

1) としてマークしprivateます。コンパイラはこれを許可しません:'private' modifier cannot be used in protocols

2) プライベート プロトコルに分離する:

しかし、コンパイラは再び不平を言います: Property 'trimmedText' must be declared internal because it matches a requirement in internal protocol 'TrimmedTextSupporting'

私はアイデアがありません。