zoukankan      html  css  js  c++  java
  • Swift 类

    1、类概念

    • 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里。

      • 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法。
      • 类是一个静态的概念,类本身不携带任何数据。
      • 当没有为类创建任何对象时,类本身不存在于内存空间中。
    • 在 OC 中创建类时,会得到两个文件:一个接口文件(.h 文件)和一个实现文件(.m 文件)。而在 Swift 中生成类时,只有一个文件 .swift 文件。

      // 定义类
      class Student {
          
          var name: String = ""
          var age: Int = 10
      }
      
      // 创建类实例
      let classItem = Student()
      
      • 定义类时使用 class 关键字,上面的类中有两个属性,并且都声明了类型,做了初始化。
      • 创建类实例时使用了 let 关键字声明,表达了不希望类被改变的意图,但是只要不改变类的指针,仍可以随意修改类中的属性。

    1.1 Swift 中类与结构体的关系

    • 它们的共同点如下

      • 1)都可以定义一些可以赋值的属性。属性的类型和写法大多相同。当然也有不同,比如类型属性的写法,在类中用 class 前缀,在结构体中用 static 前缀修饰。
      • 2)都可以定义具有功能性的方法。可定义方法类型也大多相同。但正如属性,对于类型方法的定义,在类中用 class 前缀,在结构体中用 static 前缀修饰。
      • 3)都可以定义下标脚本,使用下标语法。
      • 4)都可以定义初始化方法来设置初始状态,初始化属性。
      • 5)都可以做扩展实现。
    • 它们的不同点如下

      • 1)在数据结构的扩展和继承方面,类更加强大。
      • 2)我们可以让一个类的实例来反初始化,适时释放存储空间,但是结构体做不到。
      • 3)类的对象是引用类型,而结构体是值类型。
    • 从上面可以看出类和结构体在定义、初始化方法、属性定义等方面几乎完全相同,class 和 struct 关键字可以互换。

      • 但类的赋值是传引,而结构体则是传值。
      • 两个结构体,只要属性值都相同,我们就可以认为结构体相同,是同一个结构体。
      • 而两个类的对象,光是属性值相同,并不一定相同,不一定是类的同一个对象。
    • 一般来说,下面的一个或多个条件满足时,应当选择创建一个结构体

      • 1)结构主要是用来封装一些简单的数据值。
      • 2)当复制或者传递的时候更希望这些封装的数据被赋值,而不是被引用过去。
      • 3)所有被结构存储的属性本身也是数字类型。
      • 4)结构不需要被另外一个类型继承或者完成其他行为。
    • 用类会是更好的选择。也就是说一般情况下,数据都会定义为类。

    2、类组合

    • 在面向对象的设计原则中,有一条叫 “组合优先于继承”。

    • 组合就是在已有的类或者模块上实现一个新功能时,可以通过在新的类里实现新功能,同时在新的类里,调用或者组合已有的对象,两者联合在一起实现功能。既是说一个类的某一属性是另一个类的实例。

    • 白箱复用:继承时子类继承父类,子类就拥有了父类所有相关的属性和方法,也就是说父类的实现细节,对于子类其实是可见的。使用继承的目的是为了代码复用,这种复用方式叫 “白箱复用”。

    • 黑箱复用:组合是通过对象的方式访问已有的类的功能。在类中,可以封装的比较彻底,类所暴露出来的接口和属性是相当有限的,在调用时也不需要明白类的实现细节,这种复用方式叫 “黑箱复用”。

    3、类前缀

    • 在开发 iOS 程序时,最好在每个类名前面加一个前缀,用来标识这个类。

      • 目的是防止 N 个人开发了一样的类,出现冲突。
    • 比如 Jake Will、Kate Room 在同一个项目中都各自开发了个 Button 类,这样的程序是不能运行起来的。

      • 解决方案:Jake Will 的类名叫做 JWButton,Kate Room 的类名叫做 KRButton
    • 类前缀的设置

      • Xcode 6 之后

        • 创建完项目后设置。

        • 设置完后,再创建新的文件时会自动添加上设置的类前缀。

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/QianChia/p/8632076.html
Copyright © 2011-2022 走看看