2017-09-08 16 views
-1

私は、次の機能があります。私はこの関数を呼び出し、パラメータを渡ししようとしていますスウィフトプロトコル:[Y]の予想される引数の型に `[X]」型の値を変換できません

public enum RemoteRecordChange<T: ParsedProtocol> { 
    case insert(T) 
    case update(T) 
    case delete(RemoteRecordID) 
} 

func processRemoteChanges<T: ParsedProtocol>(_ changes: [RemoteRecordChange<T>], completion: @escaping() ->()) { 
    // To Something 
} 

を:

関数を呼び出すときに、私はエラーを取得しています
public struct Friend: ParsedProtocol { 
    // Has some properties 
} 

let friend = Friend() 
// populate properties friend.username = "aUserName", etc. 

self.processRemoteChanges([friend]) 

はコンパイルエラー:

`Cannot convert value of type '[Friend]` to expected argument type of `[RemoteRecordChange<..>]' 

私が間違っていることがわかりません。必要に応じて、より多くのコードを提供することができます。

+0

'[RemoteRecordChange ]が欲しく、それに' [Fr 'iend]'。 'RemoteRecordChange 'は列挙型で、 'Friend'は' ParsedProtocol'を実装する構造体です。 – zneak

答えて

1

あなたがここでやりたいことは意味がありません。

self.processRemoteChanges([friend]) 

パラメータとして「変化」のリストを取る必要がありprocessRemoteChanges`方法。あなたが渡しているものは、友人のリストです。それは理にかなっていますか?いいえ

あなたの列挙によると、変更は挿入、削除、または更新になる可能性があります。だから1つを選択してprocessRemoteChangeに渡してください!

作成したばかりの友人の遠隔挿入処理したい場合は:あなたは友人のリモート更新を処理したい場合は

// remember the completion handler! 
processRemoteChanges([.insert(friend)], completion: {...}) 

を:

processRemoteChanges([.update(someFriend)], completion: {...}) 

処理したい場合友人の遠隔削除:

processRemoteChanges([RemoteRecordChange<Friend>.delete(someID)], completion: {}) 
関連する問題