我感激任何帮助 - 我绞尽脑汁待了好几天,我不知道为什么这不起作用。
基本上,我有一个主视图控制器,它将由不同的类控制,具体取决于用户选择的游戏
'经典' '无限' '定时'
当按下用户按钮时,它需要浏览选项并将类的实例分配给变量'大脑'。
这就是我所拥有的:
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分配实例变量吗?
任何帮助都会很棒,欢呼!
答案 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()
现在您可以为变量分配不同的类型,但在很多情况下,您必须稍后在代码中将变量强制转换为特定类型。