簡體   English   中英

Swift:實現協議的結構數組

[英]Swift: array of structs implementing protocol

我不明白為什么我不能將一個結構數組(實現一個協議)傳遞給一個需要符合該協議的數組的函數。

我在以下位置收到編譯錯誤: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!"

如果您將其更改為以下內容,它會起作用:

var toRender = [MyType]()
toRender.append(Process(name: "pro1",number: 3))

您的函數setDataToRender需要一個MyType類型的數組。 當你實例化你的數組時,你將它輸入到Process 盡管Process實現了MyType它與MyType 因此,您必須將toRender創建為MyType類型的數組才能將其發送到setDataToRender

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM