使用switch分配实例变量

时间:2015-08-05 17:37:38

标签: swift switch-statement instance instance-variables

我感激任何帮助 - 我绞尽脑汁待了好几天,我不知道为什么这不起作用。

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

'经典' '无限' '定时'

当按下用户按钮时,它需要浏览选项并将类的实例分配给变量'大脑'。

这就是我所拥有的:

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'。

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

任何帮助都会很棒,欢呼!

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:1)

Swift是一种强类型语言,变量brain被声明为类型GuessMeComparer  声明后,您无法更改类型。

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

 var brain : AnyObject = GuessMeComparer()

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