我定义了以下子类,其主要属性链接到枚举:
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/