美文网首页
Swift--- 对象和类

Swift--- 对象和类

作者: 彬至睢阳 | 来源:发表于2018-11-25 17:53 被阅读0次

使用类后跟类名创建类。类中的属性声明与常量或变量声明的编写方式相同,只是它位于类的上下文中。同样,方法和函数声明的编写方式也是一样的。

     class Shape {

     var numberOfSides = 0

     func simpleDescription() -> String {

     return "A shape with \(numberOfSides) sides."

     }

     }

     注意self是如何将name属性从name参数区分为初始化器的。初始化器的参数在创建类的实例时像函数调用一样传递。每个属性都需要一个指定的值——无论是在声明(如numberOfSides)中还是在初始化器(如名称)中。

     如果在释放对象之前需要执行一些清理,可以使用deinit创建deinitializer。

     子类在类名之后包含它们的超类名,用冒号分隔。类不需要子类化任何标准的根类,因此可以根据需要包含或省略超类。

     重写超类实现的子类上的方法被标记为覆盖方法,这是意外发生的,没有覆盖,编译器会将其检测为错误。编译器还会检测带有override的方法,这些方法实际上并不覆盖超类中的任何方法。

     class Square: NamedShape {

     var sideLength: Double

     init(sideLength: Double, name: String) {

     self.sideLength = sideLength

     super.init(name: name)

     numberOfSides = 4

     }

     func area() -> Double {

     return sideLength * sideLength

     }

     override func simpleDescription() -> String {

     return "A square with sides of length \(sideLength)."

     }

     }

     let test = Square(sideLength: 5.2, name: "my test square")

     test.area()

     test.simpleDescription()

     除了存储的简单属性之外,属性还可以有getter和setter。

     class EquilateralTriangle: NamedShape {

     var sideLength: Double = 0.0

     init(sideLength: Double, name: String) {

     self.sideLength = sideLength

     super.init(name: name)

     numberOfSides = 3

     }

     var perimeter: Double {

     get {

     return 3.0 * sideLength

     }

     set {

     sideLength = newValue / 3.0

     }

     }

     override func simpleDescription() -> String {

     return "An equilateral triangle with sides of length \(sideLength)."

     }

     }

     var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")

     print(triangle.perimeter)

     // Prints "9.3"

     triangle.perimeter = 9.9

     print(triangle.sideLength)

     // Prints "3.3000000000000003"

     设置子类声明的属性值。

     调用超类的初始化器。

     更改父类定义的属性的值。此时还可以完成任何使用方法、getter或setter的额外设置工作。

     如果您不需要计算属性,但是仍然需要提供在设置新值之前和之后运行的代码,那么使用willSet和didSet。您提供的代码将在初始化器之外的任何时候运行。

     class TriangleAndSquare {

     var triangle: EquilateralTriangle {

     willSet {

     square.sideLength = newValue.sideLength

     }

     }

     var square: Square {

     willSet {

     triangle.sideLength = newValue.sideLength

     }

     }

     init(size: Double, name: String) {

     square = Square(sideLength: size, name: name)

     triangle = EquilateralTriangle(sideLength: size, name: name)

     }

     }

     var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")

     print(triangleAndSquare.square.sideLength)

     // Prints "10.0"

     print(triangleAndSquare.triangle.sideLength)

     // Prints "10.0"

     triangleAndSquare.square = Square(sideLength: 50, name: "larger square")

     print(triangleAndSquare.triangle.sideLength)

     // Prints "50.0"

相关文章

  • Swift--- 对象和类

    使用类后跟类名创建类。类中的属性声明与常量或变量声明的编写方式相同,只是它位于类的上下文中。同样,方法和函数声明的...

  • 对象、类对象和元类对象

    http://www.tuicool.com/articles/mmyuUr http://blog.csdn.n...

  • python 类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的...

  • 类,类对象和实例对象

    Python 的类定义写完之后就成了一个类对象,而引用这个类对象的就是实例对象。 类中定义的属性和方法都是静态属性...

  • 面相对象-02类和对象

    类和对象 目标 ●类和对象的概念●类和对象的关系●类的设计 01.类和对象的概念 类和对象是面向对象编程的两个核心...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • 13.Python类和对象

    目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核...

  • 12.Python类和对象

    目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核...

  • 类和对象 ​​​

  • 类和对象

    对象=属性+方法 self 由同一个类可以生成无数对象,当一个对象的方法被调用是,对象会将自身的引用作为第一个参数...

网友评论

      本文标题:Swift--- 对象和类

      本文链接:https://www.haomeiwen.com/subject/tnpwxqtx.html