Swift协议不起作用

时间:2016-04-08 11:27:29

标签: swift protocols

[为什么无法将[HomeADItem]转换为[ADItem]?怎么了? ]

如果我用@objc标记ADItem协议,请将HomeADItem超类修改为NSObject,这是有效的。谁能帮助我,谢谢你们!

protocol ADItem {
    var name: String { get }
    var id: String { get }
}

class ADScrollView: UIView {
    class func viewWithframe(frame: CGRect, items: [ADItem]) {}
}

struct HomeADItem: ADItem {
    let name: String
    let id: String
    init(name: String, id: String) {
        self.name = name
        self.id = id
    }
}

let items = [
    HomeADItem(name: "test1", id: "1"),
    HomeADItem(name: "test2", id: "2")
]

ADScrollView.viewWithframe(CGRectZero, items: items)

1 个答案:

答案 0 :(得分:3)

Swift不会自动将[HomeADItem]的类型推断为[ADItem]。给它一个明确的注释应该可以解决你的问题。

let items: [ADItem] = [
    HomeADItem(name: "test1", id: "1"),
    HomeADItem(name: "test2", id: "2")
]
ADScrollView.viewWithframe(CGRectZero, items: items)