[解決済み] swiftにおけるプロトコルの配列型および関数パラメータとしての使用法
2022-05-12 21:23:45
質問
あるプロトコルに準拠したオブジェクトを格納するクラスを作りたい。 オブジェクトは型付き配列に格納される必要があります。Swiftのドキュメントによると、プロトコルは型として使用することができます。
型であるため、他の型が許可されている多くの場所でプロトコルを使用することができます。
- 関数、メソッド、またはイニシャライザでパラメータ型または戻り値型として使用する。
- 定数、変数、またはプロパティの型として
- 配列、辞書、またはその他のコンテナ内のアイテムの型として
しかし、以下のようにするとコンパイラエラーが発生します。
プロトコル 'SomeProtocol' は Self または関連する型の要件を持っているため、一般的な制約としてのみ使用することができます。
どうやって解決するんだ。
protocol SomeProtocol: Equatable {
func bla()
}
class SomeClass {
var protocols = [SomeProtocol]()
func addElement(element: SomeProtocol) {
self.protocols.append(element)
}
func removeElement(element: SomeProtocol) {
if let index = find(self.protocols, element) {
self.protocols.removeAtIndex(index)
}
}
}
どのように解決するのですか?
あなたは、まだ良い解決策が存在しないSwiftのプロトコルの問題の亜種にぶつかりました。
参照 Swift でソートされているかどうかを確認するために Array を拡張する? を参照してください、それはあなたの特定の問題に適しているかもしれないそれを回避する方法についての提案を含んでいます(あなたの質問は非常に一般的です、多分あなたはこれらの答えを使って回避策を見つけることができます)。
関連
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
iOSコンパイルポッドでエラー CocoaPods could not find compatible versions for pod "XXXXX" が報告される。
-
JenkinsがIOSを自動パッケージングしてモミを配布
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
制御が非ボイド関数の終了に達する
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] Swiftで配列に要素を追加する
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。