第四节 Swift对象和类

来源:互联网 发布:button按钮调用js 编辑:程序博客网 时间:2024/06/08 04:14

本文来自于疯子们的开源图书

使用class 加上class的名字来创建一个类。属性定义类似跟常量或者变量声明是一样的(除了定义在class当中不一样以外)。同样的,方法或者函数的声明也和之前是一样的。

试验:

使用let添加一个常量属性,再添加一个只有一个参数的函数

 

在类名之后加上()来定义个类的实例。使用点号(.)来访问实例的属性和方法。

目前这个版本的Shape类少了一些重要的东西:在创建实例的时候,需要一个构造器来建立这个class。可以使用init来创建构造器。

注意到怎么使用self关键字来区分类的name属性和构造器的name参数。当创建一个类实例的时候,可以像普通的方法调用一样,向构造器传递参数。每个熟悉都需要赋予一个值,要么像numberOfSlides一样直接声明,要么像name一样在构造器当中赋值。

如果你想在对象被回收之前,执行一些清理的工作,可以使用deinit来创建一个析构函数。

在子类之后可以使用冒号(:)添加父类。对于子类来说,没有任何强制的要求去继承某个标准的基类(root class),这样你就可以在有需要的时候包含或者省略父类。

在子类当中可以使用override覆盖父类的方法实现。在子类当中偶然的覆盖了父类的方法,但是没有override关键字的话,编译器就会报告一个错误编译器同时也会检测那些声明了override的方法是否真的覆盖了父类中的方法。

试验:

定义另外一个NamedShaped 的子类Circle,使用半径和名称作为构造器的参数,并且在Circle类中实现areadescribe方法。

类属性除了可以存储值以外,还可以有getter和setter.

perimeter这个setter当中,新值有个隐含的名字 newValue.你也可以set指定一个显式的名字。

注意一下EquilateralTriangle类的构造器里面包含了三个不同的步骤:

  1. 为子类的属性赋值
  2. 调用父类的构造器
  3. 改变父类定义的属性值。其他任何使用方法,getters,setter的构建工作都可以在此处完成。

如果你不必计算属性值,但是仍需在设置新值的前面或者后面执行某些代码的话,可以使用willSetdidSet.例如,下面的类定义确保了三角形的边长始终和正方形的边长相等。

类方法和普通的函数有一个很大的不同:普通函数的参数名只能用在函数里面,但是类方法的参数名也可以在方法调用的时候使用(除了第一个参数以外)。默认情况下,方法内参数名和方法调用时候的名称是一样的,不过在方法内部使用的时候,你也可以给参数指定另外一个名字。

当使用可选值(optional values)的时候,你可以在操作(比如方法,属性和下标)之前使用?操作符。如果在?之前的值是nil的话,那么?之后的一切都将被忽略掉,整个表达式的值就是nil.否则的话,可选值将会被展开,?之后的一切都会作用到展开值上面。两种情况下,整个表达式的值都是可选值。


0 0
原创粉丝点击