协议中的静态变量

时间:2016-03-18 10:10:16

标签: ios swift

我有一个协议A,它有一个静态变量x。 B是A的实现。在C类中,我传递B的实例并将其分配给a。如何从中访问2(B类中的x值)?

protocol A {
 static var x : Int { get }  
}

class B : A {
 static var x: Int {
  return 2 
}
}


class C {
// instance of B is assigned to a. 
let a: A


print(a.x)
}

3 个答案:

答案 0 :(得分:3)

static变量属于该类,而不属于实例。您可以致电dynamicType

来参考课程
print(a.dynamicType.x)

答案 1 :(得分:1)

class C中,a是一个属性,其中包含一个符合protocol A的类型的实例。但是,静态变量(也称为类变量)无法从实例访问,可以从类访问它,因此您将通过以下方式访问该值:

B.x

实例变量将是另一个问题,其代码为:

protocol A {
    var x : Int { get }
}

class B : A {
    var x: Int {
        return 2
    }
}


class C {
    // instance of B is assigned to a.
    let a: A
    init() {
        a = B()
    }

}

C().a.x

这些可以与相同的变量名称共存:

protocol A {
    static var x : Int { get }
    var x : Int { get }
}

class B : A {
    static var x: Int {
        return 2
    }
    var x: Int {
        return 2
    }
}


class C {
    // instance of B is assigned to a.
    let a: A
    init() {
        a = B()
    }

}

C().a.x
B.x

答案 2 :(得分:0)

自从发布此答案以来,情况发生了一些变化

(*q)[0]