swift - "Cannot assign to the result of this expression"变量 (var) 引起的错误

标签 swift subclass enumeration scenekit

我定义了以下子类,其主要属性链接到枚举:

let NumberOfColors: UInt32 = 6

enum SphereColor: Int, Printable {
case Red = 0, Yellow, Blue, Green, Purple, White

var sphereName: String {
    switch self {
    case .Red:
        return "red"
    case .Yellow:
        return "yellow"
    case .Blue:
        return "blue"
    case .Green:
        return "green"
    case .Purple:
        return "purple"
    case .White:
        return "white"
    }
}

var description: String {
    return self.sphereName
}

static func random() -> SphereColor {
    return SphereColor(rawValue: Int(arc4random_uniform(NumberOfColors - 1)))!
    }
}


class Sphere: SCNSphere {
var color : SphereColor

init(radius: CGFloat, color: SphereColor) {
    self.color = color
    super.init()
    switch color.rawValue as Int {
    case 0:
        self.firstMaterial?.diffuse.contents = UIColor.redColor()
    case 1:
        self.firstMaterial?.diffuse.contents = UIColor.yellowColor()
    case 2:
        self.firstMaterial?.diffuse.contents = UIColor.blueColor()
    case 3:
        self.firstMaterial?.diffuse.contents = UIColor.greenColor()
    case 4:
        self.firstMaterial?.diffuse.contents = UIColor.purpleColor()
    case 5:
        self.firstMaterial?.diffuse.contents = UIColor.whiteColor()
    default:
        break
    }
}

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    }
}

使用实例化它

let sphere = Sphere(radius: radius, color: SphereColor.random()) 

let sphereNode = SCNNode(geometry: sphere)

工作正常,但是当我选择其中一个节点并尝试使用

更改其颜色属性时
// node selection...
var geom = node.geometry! as! Sphere
geom.color.rawValue = 5

我收到“无法分配给此表达式的结果”错误,但我尚未将颜色属性声明为常量,并且不明白为什么会发生这种情况。我假设我在与 Sphere 类相关的代码中犯了一些基本错误,对此有什么想法吗?

编辑:使用

geom.color = SphereColor(rawValue: 5)!

正如 Martin R 所说,允许我构建并运行我的代码,但球体的颜色没有改变,这让我认为我的子类声明仍然有问题。

最佳答案

rawValue 是只读属性,您无法分配新值 到它。您必须创建一个 SphereColor 原始值并将其分配给 color 属性:

geom.color = SphereColor(rawValue: 5)!

或者如果原始值有可能超出范围 并且不存在匹配的颜色:

if let color = SphereColor(rawValue: 5) {
    geom.color = color
}

关于swift - "Cannot assign to the result of this expression"变量 (var) 引起的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542491/

相关文章:

ios - 无主引用

ios - 更改 UISearchBar 放大图标颜色和位置

ios - 在启动应用程序时从 Google Maps IOS 获取当前位置

java - 如何访问在 java swing 中运行时实例化的对象的事件监听器

java - 在 Java 中枚举正则表达式的可能匹配项

c - 是否有一种算法可以打印数组子序列的所有排列?

Swift SpriteKit GameplayKit 检查 GKStateMachine 不等于状态

python - Django - 如何序列化继承

r - 使用R将变量值编码为类

ios - 通过索引和元素枚举 NSArray 的惯用方法