我是Swift代码的新手,对不起我糟糕的英语。 这是我的代码:
y
XCode返回:类型MyClassProtocol不符合协议 " AnyObject"
任何想法? 感谢
答案 0 :(得分:1)
===
运算符只能应用于类的实例。但是,Swift没有类,它也有结构。结构也可以采用MyClassProtocol
。问题是,当Swift仅将instance
视为MyClassProtocol
时,它不知道它是结构还是类,因此您无法使用===
。
要解决此问题,您需要阻止结构采用MyClassProtocol
。这是通过让它继承自AnyObject
(这是一个空类协议)来完成的。
protocol MyClassProtocol : AnyObject {
答案 1 :(得分:0)
您需要让MyClassProtocol继承AnyObject
protocol MyClassProtocol : AnyObject {
}
答案 2 :(得分:0)
我认为你的MyclassProtocol不能从AnyObject继承。 所以试试这个:这可能是有效的。
protocol MyClassProtocol:AnyObject{ // make sure you protocol inherit from AnyObject
func doSomething()
}
class Myclass:MyClassProtocol{
func doSomething() {
}
}
class Myclass2: MyClassProtocol {
func doSomething() {
}
}
var t = Array<MyClassProtocol>()
var instance1 = Myclass () //protocol MyClassProtocol
var instance2 = Myclass () //protocol MyClassProtocol
var instance3 = Myclass2 () //protocol MyClassProtocol
t.append (instance1)
t.append (instance2)
t.append (instance3)
for instance in t{
if (instance === instance1){
}
}
答案 3 :(得分:-1)
您的课程需要实施MyClassProtocol协议
e.g。
class MyClasse: NSObject, MyClassProtocol
^ Here we tell the class that it should implement the protocol
除此之外,你还可以像这样声明你的数组:
var t : [MyClassProtocol] = [];