![](/img/trans.png)
[英]GMSAutocompleteResultsViewControllerDelegate conforming to protocol Swift
[英]Swift: conforming to properties in protocol?
如何在Swift中確認聲明其他協議屬性的協議?
有一個協議GKGameModel
,其中的實現者需要具有符合協議的屬性
public protocol GKGameModel {
// ...
public var players: [GKGameModelPlayer]? { get }
public var activePlayer: GKGameModelPlayer? { get }
// ...
}
public protocol GKGameModelPlayer {
// ...
}
現在,假設我有一個符合上述協議的Player
和GameModel
類
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
類符合協議GKGameModelPlayer
,因此應確認正確。 我該如何進行編譯?
奇怪的是,Objective-C可以很好地解決這個問題–看一下FourInARow示例代碼,它執行類似的操作。
該協議要求完全按照所示鍵入屬性。 換句話說,是一個GKGameModelPlayer
數組和一個可選的GKGameModelPlayer?
。 如果您的Player
類型符合協議,那么如果將類型為Player
數組[GKGameModelPlayer]
類型轉換為[GKGameModelPlayer]
,則可以將其傳遞給協議屬性。
但這里的要求是不是,例如, activePlayer
屬性,具有符合一類GKGameModelPlayer
,而是一個activePlayer
引用的實例,這類型為/投作為一個財產GKGameModelPlayer
。
即這將修復錯誤:
class GameModel : NSObject, GKGameModel {
//...
public var players: [GKGameModelPlayer]?
public var activePlayer: GKGameModelPlayer?
}
players
和activePlayer
酒店符合一個類型GKGameModelPlayer
。 因此,只需將其更改為GKGameModelPlayer
類型而不是Player
class GameModel : NSObject, GKGameModel {
//...
public var players: [GKGameModelPlayer]?
public var activePlayer: GKGameModelPlayer?
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.