static 和 class

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static 和 class相关的知识,希望对你有一定的参考价值。

参考技术A 在swift中 static和class都是用来表示”类型范围作用域“,但是在oc中并不会特别区分,而在swift中这两个关键字不能混用。

在非class的类型中我们使用static来定义类型作用域,包括enum和struct,我们可以在类型范围内声明并使用存储属性,计算属性和方法,

class关键字是专门用在class类型上下文中,可以用来修饰类方法及计算属性,但是不能出现class的存储属性

会得到编译错误 class variables not yet supported

在swift1.2及以后,我们可以在class中使用static来声明一个类作用域的变量:

有一个比较特殊的是protocol ,在swift中class struct enum都可以实现protocol, 那么如果在protocol中定义一个类型域上的方法或者计算属性,应该选用哪个关键字呢?答案是static,而在class中 我们既可以使用class也可以使用static,他们是相同的。

在swift1.2之前 protocol使用的是class但是这确实是不合理的,swif1.2和2.0分两次对此进行了改进,现在只需要记住,在任何时候使用static都是没问题的。

class中static总结-静态成员函数和静态成员变量

C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化,我们一般选择在类的实现文件中初始化,初始化的方式是书写一遍类型的定义:

//A.cpp
int A::n(9);              //使用字面量9来初始化n
vector<int> A::buf(100);  //调用vector的带参构造函数来初始化

一、静态成员函数中不能调用非静态成员。

二、非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。

三、静态成员变量使用前必须先初始化(如int MyClass::m_nNumber = 0;),否则会在linker时出错。

四、const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化。

五、静态成员函数独立与对象,直接使用类名加上作用域运算符就可以调用函数,当做作用域运算符就可以直接调用

参考

 

与类实例无关。
把类名当成namespace用。
控制该函数的访问权限。
控制类内的static变量。

 

参考:




以上是关于static 和 class的主要内容,如果未能解决你的问题,请参考以下文章

状态模式

调用类方法时的NameError

JavaScript-状态模式

类名后的分号有啥作用? [复制]

设计模式之- 状态模式(State Pattern)

Wagtail admin,CheckboxSelectMultiple不保存数据