Swift 类和对象

创建和使用类

  Swift
使用class创建一个类,类可以包含字段和方法:


1 class Shape {
2 var numberOfSides = 0
3 func simpleDescription () -> String {
4 return "A shape with \(numberOfSides) sides."
5 }
6 }

创建Shape类的实例,并调用其字段和方法。


1 var shape = Shape ()
2 shape.numberOfSides = 7
3 var shapeDescription = shape.simpleDescription ()

通过init构建对象,既可以使用self显式引用成员字段(name),也可以隐式引用(numberOfSides)。


 1 class NamedShape {
2 var numberOfSides: Int = 0 var name: String
3
4 init (name: String) {
5 self.name = name
6 }
7
8 func simpleDescription () -> String {
9 return "A shape with \(numberOfSides) sides."
10 }
11 }

使用deinit进行清理工作。

继承和多态

  Swift
支持继承和多态(override父类方法):


 1 class Square: NamedShape {
2 var sideLength: Double
3
4 init (sideLength: Double, name: String) {
5 self.sideLength = sideLength
6 super.init (name: name)
7 numberOfSides = 4
8 }
9
10 func area () -> Double {
11 return sideLength * sideLength
12 }
13
14 override func simpleDescription () -> String {
15 return "A square with sides of length \(sideLength)."
16 }
17 }
18 let test = Square (sideLength: 5.2, name: "my test square")
19 test.area ()
20 test.simpleDescription ()

注意:如果这里的simpleDescription方法没有被标识为override,则会引发编译错误。

属性

  为了简化代码,Swift
引入了属性(property),见下面的perimeter字段:


 1 class EquilateralTriangle: NamedShape {
2 var sideLength: Double = 0.0
3
4 init (sideLength: Double, name: String) {
5 self.sideLength = sideLength
6 super.init (name: name)
7 numberOfSides = 3
8 }
9
10 var perimeter: Double {
11 get {
12 return 3.0 * sideLength
13 }
14 set {
15 sideLength = newValue / 3.0
16 }
17 }
18
19 override func simpleDescription () -> String {
20 return "An equilateral triagle with sides of length \(sideLength)."
21 }
22 }
23 var triangle = EquilateralTriangle (sideLength: 3.1, name: "a triangle")
24 triangle.perimeter
25 triangle.perimeter = 9.9
26 triangle.sideLength

注意:赋值器(setter)中,接收的值被自动命名为newValue

willSet 和
didSet

  EquilateralTriangle的构造器进行了如下操作:

  1. 为子类型的属性赋值。

  2. 调用父类型的构造器。

  3. 修改父类型的属性。

  如果不需要计算属性的值,但需要在赋值前后进行一些操作的话,使用willSetdidSet


 1 class TriangleAndSquare {
2 var triangle: EquilateralTriangle {
3 willSet {
4 square.sideLength = newValue.sideLength
5 }
6 }
7 var square: Square {
8 willSet {
9 triangle.sideLength = newValue.sideLength
10 }
11 }
12 init (size: Double, name: String) {
13 square = Square (sideLength: size, name: name)
14 triangle = EquilateralTriangle (sideLength: size, name: name)
15 }
16 }
17 var triangleAndSquare = TriangleAndSquare (size: 10, name: "another test shape")
18 triangleAndSquare.square.sideLength
19 triangleAndSquare.square = Square (sideLength: 50, name: "larger square")
20 triangleAndSquare.triangle.sideLength

从而保证trianglesquare拥有相等的sideLength

调用方法

  Swift
中,函数的参数名称只能在函数内部使用,但方法的参数名称除了在内部使用外还可以在外部使用(第一个参数除外),例如:


1 class Counter {
2 var count: Int = 0
3 func incrementBy (amount: Int, numberOfTimes times: Int) {
4 count += amount * times
5 }
6 }
7 var counter = Counter ()
8 counter.incrementBy (2, numberOfTimes: 7)

注意 Swift
支持为方法参数取别名:在上面的代码里,numberOfTimes面向外部,times面向内部。

?的另一种用途

  使用可空值时,?可以出现在方法、属性或下标前面。如果?前的值为nil,那么?后面的表达式会被忽略,而原表达式直接返回nil,例如:


1 let optionalSquare: Square? = Square (sideLength: 2.5, name: "optional  square") let sideLength = optionalSquare?.sideLength

optionalSquarenil时,sideLength属性调用会被忽略。

Swift 类和对象,布布扣,bubuko.com

时间: 2024-10-15 08:32:24

Swift 类和对象的相关文章

iOSDay10OC类和对象

本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事物来参与,参与该事件的事物都有哪些功能,完成该事件需要这些事物相互协作共同完成,并且完成该事件只是所有事物功能中其中的?个?功能. 2> 面向对象与面向过程的区别 3> 面向对象优点 面向对象具有良好的可扩展性和重用性. 面向对象可以降低我们代码的耦合度,提高代码的可移植性. 面向对象接近于日常生

o'c基础第一天类与对象

1. 在代码中如何使用面向对象的思维去解决问题. a. 千万不要自己去1步步实现. b. 先找1下有没有现成的专门做这个事情的人. 框架. 如果框架中有这样的人 直接喊过来用就可以了. c. 框架中如果没有呢?  就自己造1个拥有这个功能的人. 这个人不仅在这个地方可以使用 在另外的地方也可以使用. 2. 面向对象相对于面向过程. 面向对象的优点: 后期程序的维护和扩展非常的方便. 如果功能发生变化 我们只需要换1个人就可以了. OC Swift Java C# ...... 面向过程优点: 与

Swift类与结构体

类和结构体有很多共性: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标访问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol),协议提供一种特定的标准 功能 类比结构体多出的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个类实例有多个引用 类和结构体的定义 定义类和结构体: [html] view plaincopy class SomeClass { // class definition goe

ios开发之OC基础-类和对象

本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来.这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写.改写代码.在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路. 一定要明确一个要从事的方向,要不然就会感到迷茫.学习ios开发,并且从事ios开发这个行业,这就是我的选择.看到我的博客系列文章,其中大

swift 类和结构体

1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字母开头的匈牙利表示法. 结构体总是通过被复制而进行代码传递的. struct SForm{ var iXX:Int = 99 var strHello:String = "dsf" func testFunc(iXX:Int)->Int{ return iXX+1 } } class

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

本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writing Initializers and Deinitializers) 集成Interface Builder(Integrating with Interface Builder) 指明属性特性(Specifying Property Attributes) 实现Core Data Manage

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn

【编程语言】Java中的类和对象learn by Imooc

 一.什么是类和对象 * 类是模子,确定对象将会拥有的特征(属性)和方法 * 类的特点: *     类是对象的类型 *     具有相同属性和方法的一组对象的集合 * 对象的属性 *     属性-对象具有的各种特征 *     每个对象的每个属性都有用的特定值 * 对象的方法 *     方法-对象执行的操作(能干什么) * 类和对象的关系 *     类是抽象的概念,仅仅是模板 *     对象是一个你能够看得到,摸得着的具体实体 二. 如何定义Java的类 * 1.类的重要性:所有Jav