使用 switch 分配实例变量

Using switch to assign an instance variable

如果有任何帮助,我将不胜感激 - 绞尽脑汁好几天了,我不明白为什么这不起作用。

基本上,我有一个主视图控制器,它将由不同的 classes 控制,具体取决于用户选择的游戏

'classic' 'unlimited' 'timed'

按下用户按钮时,需要轻弹选项并将 class 的实例分配给变量 'brain'。

这是我的:

var brain = GuessMeComparer()

func switcher (random:String) {

switch random {

case "Classic": self.brain = ClassicBrain()
case "unlimited": self.brain = GuessMeComparer()
case "timed": self.brain = TimedBrain()

default:break

}
}

我收到错误“无法将类型 'ClassicBrain' 的值分配给类型 'GuessMeComparer' 的值。

我能想到的是你不能使用开关分配实例变量?

任何帮助都会很棒,干杯!

Swift是强类型语言,变量brain声明为GuessMeComparer.
类型 一旦声明,您就不能更改类型。

要考虑不同的类型,将变量显式声明为泛型类型AnyObject

 var brain : AnyObject = GuessMeComparer()

现在您可以为变量分配不同的类型,但在许多情况下,您必须稍后在代码中将变量转换为特定类型。

使用 AnyObject 会起作用,但正如 vadian 所说的那样 - 将强制您稍后转换为特定类型。更好的选择是在 swift 协议中为所有大脑 类 抽象一个通用接口,例如:

protocol BrainProtocol {
   // common interface here
   ...
}

class /* or struct */ ClassicBrain : BrainProtocol {
    // classic implementation here
    ...
}

class /* or struct */ TimedBrain : BrainProtocol {
    // timed implementation here
    ...
}

...

var brain : BrainProtocol