Swift中static和class关键字的深入讲解

 更新时间:2019年03月11日 08:59:56   作者:godiscoder  
这篇文章主要给大家介绍了关于Swift中static和class关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

Swift中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是static和class。这两个关键字确实都表达了这个意思,但是在其他一些语言,包括Objective-C中,我们并不会特别地区分类变量/类方法和静态变量/静态函数。但是在Swift中,这两个关键字却是不能用混的。

static和class

作用:这两个关键字都是用来说明被修饰的属性或者方法是类型(class/struct/enum)的,而不是类型实例的。

static 适用的场景(class/struct/enum)

  • 修饰存储属性
  • 修饰计算属性
  • 修饰类型方法
struct Point {
 let x: Double
 let y: Double
// 修饰存储属性
 static let zero = Point(x: 0, y: 0)
// 修饰计算属性
 static var ones: [Point] {
  return [Point(x: 1, y: 1)]
 }
// 修饰类型方法
 static func add(p1: Point, p2: Point) -> Point {
  return Point(x: p1.x + p2.x, y: p1.y + p2.y)
 }
}

class 适用的场景

  • 修饰类方法
  • 修饰计算属性
class MyClass {
// 修饰计算属性
 class var age: Int {
  return 10
 }
// 修饰类方法
 class func testFunc() {
  
 }
}

注意事项

class不能修饰类的存储属性,static可以修饰类的存储属性

//class let name = "jack" error: Class stored properties not supported in classes; did you mean 'static'?

在protocol中使用static来修饰类型域上的方法或者计算属性,因为struct、enum、class都支持static,而struct和enum不支持class

protocol MyProtocol {
 static func testFunc()
}

struct MyStruct: MyProtocol {
 static func testFunc() {
  
 }
}

enum MyEnum: MyProtocol {
 static func testFunc() {
  
 }
}

class MyClass: MyProtocol {
 static func testFunc() {
  
 }
}

static修饰的类方法不能继承;class修饰的类方法可以继承

class MyClass {
 class func testFunc() {
  
 }
 
 static func testFunc1() {
  
 }
}

class MySubClass: MyClass {
 override class func testFunc() {
  
 }
 
// error: Cannot override static method
// override static func testFunc1() {
//
// }
}

单例

class SingleClass {
 static let shared = SingleClass()
 private init() {}
}

总结

  • static能修饰class/struct/enum的计算属性、存储属性、类型方法;class能修饰类的计算属性和类方法
  • static修饰的类方法不能继承;class修饰的类方法可以继承
  • 在protocol中要使用static

参考

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Swift高阶函数contains allSatisfy reversed lexicographicallyPrecedes用法示例

    Swift高阶函数contains allSatisfy reversed lexicographicallyPr

    这篇文章主要为大家介绍了Swift高阶函数contains allSatisfy reversed lexicographicallyPrecedes用法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • swift中defer几个简单的使用场景详解

    swift中defer几个简单的使用场景详解

    在Swift 2.0中,Apple提供了defer关键字,让我们可以实现同样的效果,这篇文章主要介绍了关于swift中defer几个简单的使用场景的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用defer具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。
    2018-03-03
  • Swift之运算符重载示例详解

    Swift之运算符重载示例详解

    这篇文章主要为大家介绍了Swift之运算符重载示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Swift开发应用中如何更方便地使用颜色详解

    Swift开发应用中如何更方便地使用颜色详解

    这篇文章主要给大家介绍了关于Swift开发应用中如何更方便地使用颜色的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • Swift中常量和变量的区别与声明详解

    Swift中常量和变量的区别与声明详解

    Swift语言同样和Java和OC等语言一样是同样是需要声明常量和变量的,下面就让我们来学习一下Swift的常量和变量。这篇文章主要给大家介绍了关于Swift中常量和变量的区别与声明的相关资料,需要的朋友可以参考下。
    2017-11-11
  • 利用Swift实现各类的CATransition动画详解

    利用Swift实现各类的CATransition动画详解

    CATransition动画主要在过渡时使用,比如两个页面层级改变的时候添加一个转场效果。CATransition分为两类,一类是公开的动画效果,一类是非公开的动画效果。这篇文章主要给大家介绍了关于如何利用Swift实现各类CATransition动画的相关资料,需要的朋友可以参考下。
    2017-09-09
  • Swift实现文件压缩和解压示例代码

    Swift实现文件压缩和解压示例代码

    本篇文章主要介绍了Swift实现文件压缩和解压示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • Swift 列举内存管理与异常处理具体代码

    Swift 列举内存管理与异常处理具体代码

    内存管理和异常处理在任何编程语言中都是核心概念。尽管有很多教程解释了Swift自动引用计数的基本原理,但我发现没有一个可以从编译器的角度对其进行解释。在本文中,我们将通过详细代码列举学习Swift内存管理与异常处理
    2021-11-11
  • 浅谈swift 4.0中private所发生的变化

    浅谈swift 4.0中private所发生的变化

    Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。下面这篇文章主要给大家介绍了关于swift 4.0中private所发生的一些变化,需要的朋友可以参考下。
    2017-12-12
  • Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题

    Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题

    这篇文章主要介绍了Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题的完美解决方案,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下
    2016-11-11

最新评论