我有一个接受storeInCache
AnyObject?
当我尝试为它提供一个可选的协议对象数组时,它会因编译错误而失败" cannot invoke 'storeInCache' with an argument of list of type '([HasImage]?, String)'
"。基本上它无法转换
[HasImage]?到AnyObject?我相信。
我不明白这一点,因为数组包含对象(符合HasImage协议的是),它是一个数组,所以它的AnyObject没有?
我尝试了不同的投射方式,但没有一种方法可行。 如何在swift中解决这个问题?
示例代码:
protocol HasImage {
var imageUrl : String? {get}
}
class Product : NSObject, HasImage {
var imageUrl : String?
init(imageUrl : String?) {
self.imageUrl = imageUrl
}
}
func storeInCache(obj : AnyObject?, key : String)
{
//if no object supplied nothing to store in cache!
//...
}
func testCaching(addDummyData : Bool) {
var objectsWithImages : [HasImage]?
if addDummyData {
objectsWithImages = [Product(imageUrl: "http://wwww.someserver.com/p1/image.jpg"),Product(imageUrl: "http://wwww.someserver.com/p2/image.jpg")]
}
//fails compilation with => cannot invoke 'storeInCache' with an argument of list of type '([HasImage]?, String)'
storeInCache(objectsWithImages,"somekey")
}
答案 0 :(得分:4)
将@objc添加到您的协议声明中,它应该没问题,
@objc
protocol HasImage {
var imageUrl : String? {get}
}