我对比较代表感到困惑.我要做的是检查两个玩家是否相同.但是,当我尝试下面的代码时,我得到一个编译器错误,上面写着:"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)
该===操作被用来检查两个对象引用指向同一个对象.它是在两个AnyObject操作数上定义的.
但是,这不会马上工作,因为firstPlayer并secondPlayer不能保证是对象.该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)
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |