Swift 协议:无法将类型“[x]”的值转换为预期的参数类型 [y]

Swift Protocol: Cannot convert value of type '[x]` to expected argument type of [y]

我有以下功能:

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<..>]'

不确定我做错了什么。如果需要,我可以提供更多代码。

你想在这里做什么没有意义:

self.processRemoteChanges([friend])

processRemoteChanges 方法应将 "changes" 的列表作为参数。您传递的是朋友列表。那有意义吗?编号

根据您的枚举,更改可以是插入、删除或更新。所以选择其中之一并传递给processRemoteChange!

如果你想处理你刚刚创建的朋友的远程插入:

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

如果要处理好友的远程更新:

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

如果你想处理一个好友的远程删除:

processRemoteChanges([RemoteRecordChange<Friend>.delete(someID)], completion: {})