SWIFT - 如何比较使用Protocol键入的数组的实例

时间:2015-05-11 08:24:29

标签: swift

我是Swift代码的新手,对不起我糟糕的英语。 这是我的代码:

y
  

XCode返回:类型MyClassProtocol不符合协议   " AnyObject"

任何想法? 感谢

4 个答案:

答案 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] = [];