我在Google和SO上寻找类似的问题,但没有找到直接相关的。可能有两个相似的C#问题,但我不懂这种语言,所以我无法正确理解这些问题 (如何将对象强制转换为Type类描述的类型?,以及将变量强制转换为由另一个Type变量表示的类型?)。
我正在尝试在SpriteKit中的中编写通用的场景切换函数。我创建了一个枚举作为参数。错误出现在尝试将变量可选转换为我期望的通用类型时。
只是想澄清一下,我确信有很多原因说明这不是一个好主意。我可以想到其他处理场景更改的方法,比如为每个场景更改编写单独的方法。我只是出于技术角度好奇为什么会出现我无法理解的错误。
相关代码如下:
在中:
我是否对事情有误解?我认为您可以使用类似的语法从函数返回通用类型(例如Swift:如何从函数中返回类类型)。问题是因为它是一个属性吗?这不可能吗,或者在预期类型直到运行时才知道的情况下,还有其他检查类型的方法吗?
再强调一遍,我不是在询问更改场景的更好方法,而且我不确定是否有任何例子是绝对必要的。但是了解为什么这样做不起作用可能会帮助我或其他人更好地理解该语言的工作原理。
谢谢。
我正在尝试在SpriteKit中的中编写通用的场景切换函数。我创建了一个枚举作为参数。错误出现在尝试将变量可选转换为我期望的通用类型时。
只是想澄清一下,我确信有很多原因说明这不是一个好主意。我可以想到其他处理场景更改的方法,比如为每个场景更改编写单独的方法。我只是出于技术角度好奇为什么会出现我无法理解的错误。
相关代码如下:
在中:
func genericSceneChangeWithType(sceneChangeType: SceneChangeType) {
let expectedType = sceneChangeType.oldSceneType
guard let oldScene = self.currentScene as? expectedType else { return }
...
}
enum SceneChangeType {
case TitleSceneToGameScene
var oldSceneType: SKScene.Type {
switch self {
case .TitleSceneToGameScene:
return TitleScene.self
}
}
...
}
为了澄清,TitleScene是SKScene的自定义子类,而self.currentScene的类型为SKScene?。
在这行代码中,
guard let oldScene = self.currentScene as? expectedType else { return }
我遇到了错误,
'expectedType' is not a type
我是否对事情有误解?我认为您可以使用类似的语法从函数返回通用类型(例如Swift:如何从函数中返回类类型)。问题是因为它是一个属性吗?这不可能吗,或者在预期类型直到运行时才知道的情况下,还有其他检查类型的方法吗?
再强调一遍,我不是在询问更改场景的更好方法,而且我不确定是否有任何例子是绝对必要的。但是了解为什么这样做不起作用可能会帮助我或其他人更好地理解该语言的工作原理。
谢谢。
sceneChangeType
参数名称时有些奇怪。不幸的是,他需要重新设计整个场景切换系统——SceneChangeType
本质上是一种运行时的处理方式。 - andyvn22