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: {})
我有以下功能:
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: {})