我无法理解为什么我不能将一个结构数组(实现一个协议)传递给一个期望符合该协议的数组的函数。
我收到编译错误: r.setDataToRender(toRender) - >无法将[Process]类型的值转换为预期的参数类型[MyType]。
我能做的是创建一个数组[MyType]并附加toRender的每个元素并改为传递新数组,但这似乎效率低下。
//: Playground - noun: a place where people can play
typealias MyType = protocol<Nameable, Countable>
protocol Nameable {
func getName() -> String
}
protocol Countable {
func getCount() -> Int
}
struct Process : MyType {
let processName: String?
let count: Int?
init(name:String, number: Int) {processName = name; count = number}
func getCount() -> Int {return count!}
func getName() -> String {return processName!}
}
class Renderer {
var data = [MyType]()
func setDataToRender(d: [MyType]) {
data = d
}
func setOneProcessToRender(d: Process) {
var temp = [MyType]()
temp.append(d)
data = temp
}
}
var toRender = [Process]()
toRender.append(Process(name: "pro1",number: 3))
let r = Renderer()
r.setOneProcessToRender(Process(name: "pro2",number: 5)) // OK
r.setDataToRender(toRender) // KO
var str = "Hello, Stackoverflow!"
答案 0 :(得分:1)
如果您将其更改为:
var toRender = [MyType]()
toRender.append(Process(name: "pro1",number: 3))
您的函数setDataToRender
需要一组类型MyType
。实例化数组后,将其键入Process
。虽然Process
实施MyType
,但它与MyType
不同。因此,您必须将toRender
创建为MyType
类型的数组,才能将其发送到setDataToRender
。