2015-05-13 17 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

    谢谢,这个问题的答案帮助了很多 –