说我有以下示例:
class ClassOne {
enum Color {
case Red
case Blue
}
func giveColor() -> Color {
return .Red
}
}
class ClassTwo {
let classOne = ClassOne()
var color: Color = classOne.giveColor()
}
编译器抱怨它不知道Color
中的ClassTwo
是什么。我怎么能最好地处理这个?
答案 0 :(得分:28)
您的Color
枚举是嵌套类型 - 您可以ClassOne.Color
访问它。而且,您不能在声明中分配另一个属性。保持未分配状态,并在init()
:
class ClassOne {
enum Color {
case Red
case Blue
}
func giveColor() -> Color {
return .Red
}
}
class ClassTwo {
let classOne = ClassOne()
var color: ClassOne.Color
init() {
self.color = self.classOne.giveColor()
}
}
答案 1 :(得分:3)
您不能在另一个属性的默认值中使用一个属性的默认值。您可以通过在init方法中设置颜色来解决此问题:
class ClassTwo {
let classOne: ClassOne = ClassOne()
var color: ClassOne.Color
init(){
color = classOne.giveColor()
}
}
由于Color是ClassOne中的枚举,因此对于其类型,您应使用ClassOne.Color
而不是Color
。
您还可以将颜色设为这样的计算属性:
class ClassTwo {
let classOne: ClassOne = ClassOne()
var color: ClassOne.Color {
get{
return classOne.giveColor()
} }
}
在第一个示例中,color
仅在初始化时设置为classOne.giveColor()
,但在第二个示例中,每当您尝试访问classOne.giveColor()
时都会调用color
。< / p>