簡體   English   中英

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 {
    // ...
}

現在,假設我有一個符合上述協議的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類符合協議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?
}

playersactivePlayer酒店符合一個類型GKGameModelPlayer 因此,只需將其更改為GKGameModelPlayer類型而不是Player

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM