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

时间:2017-09-08 16:19:17

标签: swift generics swift-protocols

我有以下功能:

#include <stdio.h>

__global__ void kernel() {
    printf("hello world from GPU\n");
}

main() {
    printf("hello world from CPU\n");
    kernel<<<1, 10>>>();
    cudaDeviceSynchronized();
}

我正在尝试调用此函数并传入参数:

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]) 

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

1 个答案:

答案 0 :(得分:1)

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

self.processRemoteChanges([friend])

方法processRemoteChanges`应该将“更改”列表作为参数。你传递的是一个朋友列表。那有意义吗?否。

根据您的枚举,更改可以是插入,删除或更新。因此,选择其中一个并将其传递给processRemoteChange

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

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

如果您想处理朋友的远程更新:

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

如果您想处理朋友的远程删除:

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