2017-06-30 10 views
1

内の汎用関数を宣言するためにどのようにこれは私のコードは、プロトコル

protocol sharedFunction { 

     func transformDictionary<Element>(postDictionary:[Element:Element], key: Element) -> Element 


} 


class newUser: sharedFunction { 

var email:String? 
var username:String? 
var uid: String? 

func transformDictionary(postDictionary: [String : Any], key: String) -> newUser { 

} 
} 

あるしかし、私はとして 『sharedFunction』「プロトコルに準拠していない、このエラー「タイプNEWUSER」を得ることに

答えて

1

変更あなたのプロトコルの宣言を保ちます

protocol sharedFunction { 

     func transformDictionary<Element>(postDictionary:[Element: Any], key: Element) -> Any 

} 

あなたのクラスであなたのプロトコルの宣言を次のようされていません。それは、エラーの原因である。

+0

しかし、私は関数内で何かを返すようにします – bawasuru

+0

はい、これは動作するはずです。上記のコードであなたのプロトコルを置き換えてみましたか?エラーメッセージとは何ですか?私のコードに示されているように "Any"を返しています。 – adev

+0

おかげで私はそれを理解する...... – bawasuru

1

エラーは、メッセージが明確に記載されているため、タイプがプロトコルに準拠していないために発生します。私は私のコードがあなたのために理にかなっている場合は、このコードの文脈がそう私にはわからないが何であるか全くideiaを持っていない

protocol SharedFunction { 
    associatedtype Element: Hashable 
    func transformDictionary(postDictionary: [Element:Element], key: Element) -> Element 
} 

class NewUser: SharedFunction { 

    typealias Element = Int 

    var email: String? 
    var username: String? 
    var uid: String? 

    func transformDictionary(postDictionary: [Element : Element], key: Element) -> Element { 
     return 1 
    } 

} 

が、私はあなたのアイデアを得たと思う:私はこのようにあなたのコードを書き換えると思います。

関連する問題