問題タブ [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.
ios - プロトコル実装プロトコルのデフォルト実装
特定のクラスによって実装されるプロトコルを作成しようとしていますが、それらすべても実装する必要がありますUIScrollViewDelegate
。私が考えたのは、私の新しいプロトコルがプロトコルを実装することですUIScrollViewDelegate
。
プロトコルにはデフォルトの実装が必要なので、このプロトコルの拡張機能も作成しました。
コンパイルはできますが、動作しません。私は何を間違っていますか?拡張されたプロトコルのデフォルトの実装を作成する正しい方法は何ですか?
swift - Swift パブリック クラス拡張でパブリック メソッド デコレータを回避する
Swift でプロトコルを定義したとします。
次に、同じソース ファイルでクラスを定義します。
次に、同じソース ファイルにMyClass
準拠を指定するための拡張子を追加します。MyProtocol
上記のコードを Xcode 7.2 でコンパイルしようとすると、拡張機能の各メソッドにパブリック デコレータを追加する必要があることを示すコンパイラ エラーが表示されます。
上記のようなクラス拡張のすべてのメソッドに注釈を付けるのを避ける方法はありpublic
ますか?
注: public
fromを削除MyClass
すると上記のコンパイル エラーが解消されることはわかっていますが、MyClass
それを使用する Objective-C コードから見えるようにする必要があります。
ios - オプションの初期化子による CollectionType の拡張
これは、オブジェクトを作成したいときに機能します
以下を達成しようとしていますが、コンパイル時にエラーが発生しています。
次のコードは、「イニシャライザで許可される唯一の戻り値は nil です」というエラーを表示しています。
================================= 答え: -
これにより、次のコードを使用して初期化できます
swift - プロトコルに準拠したプロパティを持つ Swift プロトコル拡張
私はそのようにプロトコルを宣言しました
ここで、JSONSerializable は実際の型ではなく、次のように宣言した別のプロトコルです。
実際、この JSONConnection プロトコルには、JSONSerializable プロトコルに準拠する必要があるだけの jsonRootObject という変数が必要です。
罰金。
さて、実装について。
JSONSerializable プロトコルに準拠する JSONStockDetailRootObject というクラスを作成しました。
そして、JSONConnection プロトコルに準拠する StockConnection クラスを作成したいと考えました。
JSONSerializable プロトコルに準拠したタイプの jsonRootObject 変数があれば、このクラス StockConnection は JSONConnection プロトコルに準拠すると思いましたが、そうではありません。
コンパイラは次のように主張しています。
私は何が欠けていますか?ありがとう
swift - CollectionType のインデックス作成とイテレートを迅速に行う
基本的に次のようなコードがあります。
これは問題なく動作しますが、配列を渡したい場合もあれば、ArraySlice を渡したい場合もあります。CollectionType
次のように変換されるジェネリックとプロトコルを使用するように変更すると思いました。
ただし、次のコンパイラ エラーが発生します。
そのコンパイルを行うfor ループを切り替えることはできますが、data.indices は抽象を返すのに対し、/ 2 は Int であるfor i in data.indices
ため、これを 2 で割って midPoint を取得することはできなくなります。CollectionType.Index
Swiftでこのようなことをすることは可能ですか? 抽象プロトコルのインデックス型と、数学を実行できる実際の型との間を橋渡しできますか?
indices
PS: andを使用してコレクション全体を反復する他の例を見て見つけましたenumerate
が、コレクションの半分を明示的に反復したいだけで、ある種の 2 による除算が必要です。
ありがとう
swift - タイプ 'X' の値にはメンバー 'y' がありません - プロトコルのオプション機能
Swift のプロトコルをよりよく理解しようとしています。具体的には、オプションのプロトコル メソッドです。この問題は、プロトコルが別のファイルで定義/使用されていることに関係している可能性があると考えましたが、プレイグラウンドに次のものを配置すると、同じ問題が発生します。
エラーメッセージは次のとおりです。
何らかの理由で、プロトコルが NSObject で定義されていることを受け入れません。コード補完はそれを見つけますが、コンパイラはそれを通過させません。
私の?? true
部分が機能するかどうかはわかりませんが、メソッドが定義されていない場合に備えて、それをデフォルト値にしたいと考えています。
これを機能させるにはどうすればよいですか?
swift - Swift プロトコル: 一部のプロパティを非表示にする
trimmedText
と のプロパティを作成したいと思いUITextView
ますUITextField
。これが私がしたことです:
が as inおよび as inとして宣言されて_text
いるため、プロパティが必要です(なぜyyy?! >_<)。ここで、API が煩雑にならないように、このプロパティを非表示にしたいと思います。text
String?
UITextField
String!
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'
私はアイデアがありません。