質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

238閲覧

protocol の使い方がわかりません

jbe00214

総合スコア63

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2023/05/20 07:09

編集2023/05/20 08:41

実現したいこと

複数クラス共通のメソッドを作成したい

前提

class Aとclass Bには別々の構造体の配列プロパティが含まれていて,共通のメソッドを作成してそのプロパティの配列数を取得する。
同じプロパティ名なので,プロトコルを使用したが,クラスに適合しないというエラーが出ている。どのように解消したら良いか,わかりません。初心者です。どなたかご教示いただける方お願いします。

発生している問題・エラーメッセージ

Type 'A' does not conform to protocol 'Ex' Type 'B' does not conform to protocol 'Ex'

該当のソースコード

Swift

1struct S1 :Codable{ 2 var s: Int 3 var children:[Int] = [1,2,3] 4} 5 6struct S2 :Codable{ 7 var s: Int 8 var children:[Int] = [1,2] 9} 10 11protocol SP{ 12 associatedtype Node:Codable 13 var children:[Int]{ get set} 14} 15protocol Ex { 16 associatedtype TypeNode:SP 17 var a: [TypeNode]{get set} 18} 19 20class A: Ex{ 21 var a = [S1] () 22} 23 24class B : Ex{ 25 var a = [S2]() 26} 27 28extension Ex{ 29 func count() -> Int { 30 return a[0].children.count 31 } 32} 33 34 35var a = A() 36var b = B() 37 38 39print("\(a.count() )" ) 40print("\(b.count() )" ) 41

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

わかりました。
以下の通りです

swift

1 2struct S1 :Codable,SP{ 3 var s: Int 4 var children:[Int] = [1,2,3] 5} 6 7struct S2 :Codable,SP{ 8 var s: Int 9 var children:[Int] = [1,2] 10} 11 12protocol SP{ 13 var children:[Int]{ get set} 14} 15protocol Ex { 16 associatedtype TypeNode:SP 17 var a: [TypeNode]{get set} 18 19} 20 21class A: Ex{ 22 23 var a = [S1] () 24 25} 26 27class B : Ex{ 28 var a = [S2]() 29 30} 31 32extension Ex{ 33 func count() -> Int { 34 return a[0].children.count 35 } 36} 37 38 39var a = A() 40var b = B() 41 42var s1 = S1(s:1) 43var s2 = S2(s:1) 44a.a.append(s1) 45b.a.append(s2) 46 47 48print("\(a.count() )" ) 49print("\(b.count() )" ) 50

投稿2023/05/20 09:10

jbe00214

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問