Swift类中的静态vs类函数/变量?
下面的代码在Swift 1.2中编译:
class myClass {
static func myMethod1() {
}
class func myMethod2() {
}
static var myVar1 = ""
}
func doSomething() {
myClass.myMethod1()
myClass.myMethod2()
myClass.myVar1 = "abc"
}
静态函数和类函数有什么区别? 我应该使用哪一个,什么时候?
如果我尝试定义另一个变量class var myVar2 = ""
,它说:
类尚未支持的类存储属性; 你的意思是'静态'吗?
当这个特性被支持时,一个静态变量和一个类变量之间会有什么不同(例如,当两个变量都是在一个类中定义的时候)? 我应该使用哪一个,什么时候?
(Xcode 6.3)
static
和class
都将方法与class
相关联,而不是类的实例。 不同之处在于子类可以重写class
方法; 他们不能覆盖static
方法。
class
属性在理论上将以相同的方式运行(子类可以覆盖它们),但它们在Swift中不可能。
我尝试了mipadi在操场上的回答和评论。 并想到分享它。 干得好。 我认为mipadi的答案应该被接受。
class A{
class func classFunction(){
}
static func staticFunction(){
}
class func classFunctionToBeMakeFinalInImmediateSubclass(){
}
}
class B: A {
override class func classFunction(){
}
//Compile Error. Class method overrides a 'final' class method
override static func staticFunction(){
}
//Lets avoid the function called 'classFunctionToBeMakeFinalInImmediateSubclass' being overriden by subclasses
/* First way of doing it
override static func classFunctionToBeMakeFinalInImmediateSubclass(){
}
*/
// Second way of doing the same
override final class func classFunctionToBeMakeFinalInImmediateSubclass(){
}
//To use static or final class is choice of style.
//As mipadi suggests I would use. static at super class. and final class to cut off further overrides by a subclass
}
class C: B{
//Compile Error. Class method overrides a 'final' class method
override static func classFunctionToBeMakeFinalInImmediateSubclass(){
}
}
关于面向对象 ,答案太简单了:
子类可以覆盖类方法,但不能覆盖静态方法。
除了你的帖子之外,如果你想声明一个类变量(就像你做了class var myVar2 = ""
),你应该这样做:
class var myVar2:String {
return "whatever you want"
}
链接地址: http://www.djcxy.com/p/96683.html