gpt4 book ai didi

Swift:符合协议(protocol)中的属性?

转载 作者:行者123 更新时间:2023-11-30 12:34:49 24 4
gpt4 key购买 nike

如何在 Swift 中确认声明其他协议(protocol)属性的协议(protocol)?

有一个协议(protocol)GKGameModel,其中它的实现者需要具有符合协议(protocol)的属性

public protocol GKGameModel {
// ...
public var players: [GKGameModelPlayer]? { get }
public var activePlayer: GKGameModelPlayer? { get }
// ...

}

public protocol GKGameModelPlayer {
// ...
}

现在,假设我有一个符合上述协议(protocol)的类 PlayerGameModel

class Player : NSObject, GKGameModelPlayer  {
//...
}


class GameModel : NSObject, GKGameModel {
//...
public var players: [Player]?
public var activePlayer: Player?
}

现在上面的代码无法编译,错误消息(以及其他)是:

protocol requires property 'activePlayer' with type 'GKGameModelPlayer?'; do you want to add a stub?
candidate has non-matching type 'Player?'

但是 Player 类符合协议(protocol) GKGameModelPlayer,因此它应该可以很好地确认。我怎样才能编译它?

奇怪的是,Objective-C 很好地处理了这个问题 - 看看 FourInARow执行类似操作的示例代码。

最佳答案

协议(protocol)要求属性的键入与所示的完全一致。换句话说,一个 GKGameModelPlayer 数组和一个可选的 GKGameModelPlayer?。如果您的 Player 类型符合协议(protocol),则如果强制转换/键入为 [GKGameModelPlayer],则可以将 Player 数组传递给协议(protocol)属性>。

但这里的要求不是一个activePlayer属性,它的类型符合GKGameModelPlayer,而是一个activePlayer 属性,引用它键入/转换为 GKGameModelPlayer 的实例。

即这将修复错误:

class GameModel : NSObject, GKGameModel  {
//...
public var players: [GKGameModelPlayer]?
public var activePlayer: GKGameModelPlayer?
}

关于Swift:符合协议(protocol)中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43013246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com