如何从Swift中的另一个类访问枚举?

时间:2014-06-28 01:05:31

标签: swift

说我有以下示例:

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是什么。我怎么能最好地处理这个?

2 个答案:

答案 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>