比较两个委托对象是同一个实例

mag*_*uyu 3 ios swift

我对比较代表感到困惑.我要做的是检查两个玩家是否相同.但是,当我尝试下面的代码时,我得到一个编译器错误,上面写着:"IPlayer不能转换为MirrorDisposition".在Swift中检查代理的理想方法是什么?

这是我的代码:

var str = "Hello, playground"


protocol IPlayer{
    var x:Int {get set}
}

protocol IMatch{
    var ballOwner:IPlayer? {get set}
}


class Player:IPlayer{
    var x:Int = 5
}

class Match{
    var ballOwner:IPlayer?
}


var firstPlayer:protocol<IPlayer> = Player()
var secondPlayer:protocol<IPlayer> = Player()

//here is the problem !
if firstPlayer == secondPlayer {
   println("equal")
}


// if i check with reflection there is no error. But is it correct way?
var a = reflect(firstPlayer)
var b = reflect(secondPlayer)

if a.objectIdentifier == b.objectIdentifier {
    println("equal no error")
}
Run Code Online (Sandbox Code Playgroud)

new*_*cct 8

===操作被用来检查两个对象引用指向同一个对象.它是在两个AnyObject操作数上定义的.

但是,这不会马上工作,因为firstPlayersecondPlayer不能保证是对象.该IPlayer协议也可以通过结构和枚举来符合.要将其限制为对象,必须将其声明为protocol IPlayer : class.

ps protocol<IPlayer>可以写成公正的IPlayer.

protocol IPlayer : class {
  var x:Int {get set}
}

class Player : IPlayer {
  var x:Int = 5
}

var firstPlayer:IPlayer = Player()
var secondPlayer:IPlayer = Player()

if firstPlayer === secondPlayer {
  println("equal")
} else {
  println("not equal") // prints "not equal" as expected
}
Run Code Online (Sandbox Code Playgroud)