簡體   English   中英

Swift語法更新? 協議中不允許的類。 無法填充SKTexture

[英]Swift Syntax Update? Classes not allowed in protocol. Can't fill SKTexture

我目前正在編寫有關創建iOS等距游戲的教程。 你可以在這里找到這個

我剛剛開始對Swift進行編碼,因為使用3個月以上的教程時會出現很多語法錯誤,所以我問自己最近Swift中是否有一些主要更新。

到目前為止,我自己或XCode本身都已設法解決了這些小問題,但是我對此無能為力:

protocol TextureObject {
    class var sharedInstance: TextureDroid {get}
    var texturesIso:[[SKTexture]?] {get}
    var textures2D:[[SKTexture]?] {get}
}

這是我要設置的協議(與本教程中的完全一樣),但是XCode不允許我定義類變量。 錯誤代碼如下:

"Class properties are only allowed within classes: 
use static to declare a static property"

將“類”替換為“靜態”(這對我來說沒有邏輯意義)並刪除協議(並定義了不使用協議即可繼承的類),這會導致此代碼中的另一個錯誤:

class TextureDroid: TextureObject  {

class var sharedInstance: TextureDroid {
    return textureDroid
}

let texturesIso:[[SKTexture]?]
let textures2D:[[SKTexture]?]

init() {

    texturesIso = [[SKTexture]?](count: 2, repeatedValue: nil)
    textures2D = [[SKTexture]?](count: 2, repeatedValue: nil)

    //Idle
    texturesIso[Action.Idle.rawValue] = [
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.N, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.NE, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.E, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.SE, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.S, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.SW, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.W, Action.Idle)),
        SKTexture(imageNamed: "iso_3d_"+textureImage(Tile.Droid, Direction.NW, Action.Idle)),
    ]

該錯誤出現在我要填充紋理的所有行中

Immutable value 'self.texturesIso' may not be assigned to

這是我的問題:

  1. 如何解決第一個錯誤? 有沒有一種在協議內定義類的新方法?

  2. 是因為我設法消除了第一個錯誤,所以連接了這兩個錯誤,還是剛剛出現了第二個錯誤?

  3. 如何以正確的方式填充SKTexture? texturesIso.append也不起作用。

  4. 我對Swift Update正確嗎? 如果是的話,是否有Swift突然變化的概述,因為我找不到。

非常感謝任何人的幫助,在此先感謝。

本教程似乎使用的是較早版本的swift。 您可以使用使用較早的swift編譯器的舊版xcode,也可以更新代碼。 我將嘗試幫助您更新代碼。

  1. “協議聲明不能包含類,結構,枚舉或其他協議聲明。下面將詳細討論協議成員聲明。” -關於快速協議聲明的Apple文檔

只需將var類更改為static。 這不會導致第二個錯誤,只是編譯器在第一個錯誤之后停止,因此第二個錯誤不會顯示出來。

  1. 不變值'self.texturesIso'可能未分配給

    var texturesIso:[[SKTexture]?] {get}

定義了一個getter但沒有setter,因此您無法設置self.texturesIso屬性。 將其更改為{get set},並且也有必要對textures2d屬性執行相同的操作,並將其更改為類中的vars。

  1. 有一個快速更新是。 新版本是Swift 1.2

除了回答這個特定問題外,當我下載教程代碼以進行編譯時,我還需要更改touchesEnded以使用Set而不是NSSet,它會破壞touches.anyObject,因此我改用touches.first。 另外,它試圖更改gameScene中的不可變圖塊,因此我將其更改為var。

注意:我只是下載了代碼,然后將其編譯並運行,我不確定該如何運行,但是對我來說似乎還可以。 swift是否具有類級別的靜態變量? 關於計算類變量和靜態變量有一些很好的信息,盡管它沒有討論問題的協議部分

暫無
暫無

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

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