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 之后

      • 创建完项目后设置。

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

Swift 类的更多相关文章

  1. Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b

    本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...

  2. Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案

    在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...

  3. swift类、继承、接口

    import Foundation class Hello{ var _name:String?="swift global" init(name:String){ //定义类中有 ...

  4. swift 类和结构体

    1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...

  5. Swift 类构造器的使用

    Swift 中构造器需要遵循的规则还是很多的, 总结一下, 有以下规则: 调用相关 指定构造器必须调用它直接父类的指定构造器方法. 便利构造器必须调用同一个类中定义的其它初始化方法. 便利构造器在最后 ...

  6. swift 类 与 结构体

    这两天突然有人问我  swift里面 类和 结构体  有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift  语言 ...

  7. Swift类与结构体

    类和结构体有很多共性: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标访问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol),协议提供一种特 ...

  8. Swift: 类与结构体

    对比类与结构体 类与结构体有许多的相同点,它们都可以: 定义属性来存储值: 定义方法来提供功能: 定义下标操作: 定义初始化函数: 扩展它的默认的实现: 遵从协议: 类有一些额外的能力,但是结构体没有 ...

  9. Swift—类的继承-备

    Swift中的继承只能发生在类上,不能发生在枚举和结构体上.一个类可以继承另一个类的方法.属性.下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫父类(或超类).子类继承父类后,可以重写父类的 ...

  10. Swift类和结构体定义-备

    Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...

随机推荐

  1. Robotframework(4):创建变量的类型和使用

    转载:http://www.cnblogs.com/CCGGAAG/p/7800321.html 实际的测试过程中,编写脚本时,我们需要创建一些变量来暂时或者永久性的存储数据,那么在Robotfram ...

  2. C#.NET常见问题(FAQ)-如何不显示窗口的关闭按钮

    如果把ControlBox设置为false,则右上角三个按钮都看不到了   最好的方法是重写窗体的CreateParams方法,如下图所示   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间 ...

  3. ArcGIS 10.4的0x80040228许可错误

    今天,再次遇到这个问题,再忙得把它记录下来! AO/AE程序的许可方式 不管是开发环境是基于ArcObject还是基于ArcEngine,不管运行环境是Desktop还是Runtime(早已改名了为A ...

  4. 树莓派中GPIO针角定义图

    一.上图 二.上图

  5. vs 15 key

    vs 15 Key :HM6NR-QXX7C-DFW2Y-8B82K-WTYJV vs 15 Key :2XNFG-KFHR8-QV3CP-3W6HT-683CH

  6. Java I/O 操作及优化建议

    Java I/O I/O,即 Input/Output(输入/输出) 的简称.就 I/O 而言.概念上有 5 种模型:blocking I/O.nonblocking I/O,I/O multiple ...

  7. MySQL事物系列:3:innodb_flush_log_at_trx_commit小实验

    1:创建表和存储过程 mysql> create database trx; Query OK, 1 row affected (0.02 sec) mysql> USE trx Data ...

  8. Markdown中实时显示数学公式的方法

    Markdown中实时显示数学公式的方法 Markdown非常好用,但是对于数学公式的实时显示有一些缺陷,如何解决这一问题呢? 一.在线LaTex编辑 点击在线LaTeX编辑方式 在对话框中输入数学公 ...

  9. PowerDesigner使用笔记

    一:PDM模版使用 1:新建model:File——new model——选择PDM,填上名字.数据库类型 2:右侧工具类使用 3:创建表与配置 点击右侧工具栏中table控件,移动到模版面板内点击一 ...

  10. cmake常用编译选项

    1.openmp加载,cmake3.9之后内置了openmp find_package(OpenMP) if (OPENMP_FOUND OR OpenMP_CXX_FOUND) set (CMAKE ...