2015-05-13 18 views
2

我目前正在製作一個iOS平等遊戲 的教程。你可以找到this one hereSwift語法更新?協議中不允許類。無法填寫SKTexture

我剛開始編碼雨燕因爲很多語法錯誤與輔導3個月內有潔癖工作時 我問我自己是否有在斯威夫特一些主要更新最近 出現。

到現在爲止,我自己或自己的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" 

兩個取代「類」到「靜態」(這使得沒有邏輯意義的我)和 刪除協議(和定義應該在不使用的繼承類協議),導致另一個錯誤在此代碼:出現在所有我想要填補texturesIso

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

這裏是線

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)), 
    ] 

這個錯誤我問題:

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

  2. 這兩個錯誤是連接的還是第二個出現,因爲我設法消除第一個?

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

  4. 我對Swift Update了嗎?如果是,是否有關於Swift所有突然變化的概述,因爲我找不到一個。

我真的很感激任何人的幫助,非常感謝提前。

回答

0

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

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

只需將類var更改爲static即可。這不會導致第二個錯誤,它只是編譯器在第一個錯誤之後停止,所以第二個錯誤不會被顯示。

  1. 不可變值'self。texturesIso」可能不會被分配到

    VAR texturesIso:[?[SKTexture] {}獲得

定義一個getter,但沒有二傳,所以沒有辦法爲你設置的self.texturesIso屬性。將其更改爲{get set},並且對textures2d屬性執行相同操作也可能是必需的,並將它們更改爲類中的變量。

  • 有一個迅速的更新是。新版本的雨燕1.2
  • 在回答這個具體問題,當我下載教程代碼,以獲得它來編譯的頂部,我也需要改變touchesEnded到使用SET而不是NSSet中,打破觸摸.anyObject,所以我使用了touches.first。此外,它試圖在gameScene中更改不可變的切片,所以我將其更改爲var。

    注:我剛剛下載的代碼,並得到它編譯和運行,我不太確定它應該如何運行,但它似乎確定了我。此外Does swift have class level static variables?對計算機類變量VS靜態變量一些有用的信息,雖然它不談論這個問題的協議位

    +0

    謝謝,這個問題的答案幫助了很多 –