[英]Value of Protocol type 'name' cannot conform to protocol 'name' with generic function
我有一个带有通用参数的 function,当它被调用时,我收到错误Value of protocol type 'AddableObject' cannot conform to 'AddableObject'; only struct/enum/class types can conform to protocols
Value of protocol type 'AddableObject' cannot conform to 'AddableObject'; only struct/enum/class types can conform to protocols
我有以下 class 和协议
class DataManager{
func updateItem<Item: AddableObject>(itemToUpdate: Item, updateValues: [String : Any], completion: @escaping ((Result<Item, Error>) -> ())){ }
}
protocol AddableObject{ }
这是我的VC中的代码
class vc: UIViewController{
weak var task: Task?
viewDidLoad(){
super.viewDidLoad()
}
private func uploadTask(){
guard let taskToUpdate = self.task else{return}
//this is where I get the error
DataManager.shared.updateItem(itemToUpdate: taskToUpdate, updateValues: ["index": 1]){result in
}
}
}
这是我的任务 object
class Task: AddableObject{
}
当我尝试从我的 VC 调用updateItem
方法时,出现错误
Value of protocol type 'AddableObject' cannot conform to 'AddableObject'; only struct/enum/class types can conform to protocols
为什么我会收到此错误?
一个明显的问题:您的声明weak var task: Task?
声明一个可选的。 但是参数itemToUpdate:
不是可选的。 它是符合 AddableObject 的泛型类型,而 Optional不是符合 AddableObject 的东西。
如果我们对此进行纠正,以及您显示的代码中的其他明显问题,则生成的代码可以完美编译:
class DataManager{
func updateItem<Item: AddableObject>(itemToUpdate: Item, updateValues: [String : Any], completion: @escaping ((Result<Item, Error>) -> ())){ }
}
protocol AddableObject{ }
class vc: UIViewController{
weak var task: Task?
private func uploadTask(){
guard let taskToUpdate = self.task else {return}
DataManager().updateItem(itemToUpdate: taskToUpdate, updateValues: ["index": 1]){result in
}
}
}
class Task: AddableObject{
}
因此,我必须得出结论,问题出在您没有向我们展示的代码中,或者您向我们歪曲了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.