使用 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
如果有任何帮助,我将不胜感激 - 绞尽脑汁好几天了,我不明白为什么这不起作用。
基本上,我有一个主视图控制器,它将由不同的 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