Swift_关键字static和class的区别
2016-05-05 12:54
465 查看
说明:
class关键字除了有自定义类的作用, 还有声明类方法的作用.
资料链接
方法–类型方法
继承–防止重写
此文章由 @春雨 编写. 经 @Scott 审核. 若转载此文章,请注明出处和作者
2. 类方法和实例方法可以重名.
代码
总结
class关键字除了有自定义类的作用, 还有声明类方法的作用.
资料链接
方法–类型方法
继承–防止重写
此文章由 @春雨 编写. 经 @Scott 审核. 若转载此文章,请注明出处和作者
代码
import UIKit class Person { // 给方法添加class关键字 class func work() { print("Type Method: Person: 警察.") } // 使用static关键字创建类方法 static func nameOfPerson(name: String) { print("Type Method: Person name: \(name)") } // 可以和类方法重名, 以及一样的参数. func nameOfPerson(name: String) { print("Instance Method: person name \(name)") } } class Teacher: Person { // 重写父类的类型方法. override class func work() { print("Type Method: Teacher: University Teacher") } /** * 下面的写法是错误的, 报错信息: Class method overrides a 'final' class method(重写了一个final的类方法.) * final 关键字: 可以通过把方法,属性或下标标记为final来防止它们被重写,只需要在声明关键字前加上final修饰符即可(例如:final var,final func,final class func,以及final subscript)。如果你重写了final方法,属性或下标,在编译时会报错。 */ // override static func nameOfPerson(name: String) { // // } } class Student: Person { // 子类Student的实例方法work(), 和父类的类方法work()没有关系, 二者不在同一个级别上, 不存在同名问题. func work() { print("Instance Method: Student: University Student") } } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let per = Person() // 父类的类方法 Person.work() /**< Type Method: Person: 警察. */ Person.nameOfPerson("Tom") /**< Type Method: Person name: Tom */ // 父类的实例方法 per.nameOfPerson("Edward") /**< Instance Method: person name Edward. */ // 子类的类方法 // 直接调用父类的类方法 Teacher.nameOfPerson("Susan") /**< Type Method: Person name: Susan */ // 调用的是子类中重写父类的类方法work() Teacher.work() /**< Type Method: Teacher: University Teacher */ let stu = Student() // 子类Student的实例方法work() stu.work() /**< Instance Method: Student: University Student */ } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
总结
1. 关键字static和class的区别在方法的func关键字之前加上关键字static或者class都可以用于指定类方法. 不同的是用class关键字指定的类方法可以被子类重写, 如下: override class func work() { print("Teacher: University Teacher") } 但是用static关键字指定的类方法是不能被子类重写的, 根据报错信息: Class method overrides a 'final' class method. 我们可以知道被static指定的类方法包含final关键字的特性--防止被重写.
2. 类方法和实例方法可以重名.
不建议写相同的方法名.
代码
总结
相关文章推荐
- Swift笔记-让你2小时学会Swift
- Swift-字典
- Swift 泛型(十九)
- 浅谈 Swift 中的泛型
- Swift代理方法反向传值
- Swift的unowned字段
- Swift-控制流
- Swift下的Lazy懒加载模式
- Swift学习笔记二:常用类型的注意事项
- Swift学习笔记一:语言特性
- swift设置返回按钮图标
- 1.swift_初体验
- 对照Java学习Swift--下标(Subscripts)
- Swift中的分类
- Swift中TextField
- Swift解读专题一——Swift2.2语言预览
- Swift 仿简书、淘宝App的弹出view效果
- swift 基本语法(二)
- Swift开发:Swift项目调用OC代码
- swift闭包