首页 > 网站 > 建站经验 > 正文

Swift-编程语言入门之对象与类

2019-11-02 14:52:17
字体:
来源:转载
供稿:网友

   使用 class 可以创建一个类。一个属性的声明则是在类里作为常量或变量声明的,除了是在类的上下文中。方法和函数也是这么写的。

  class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with (numberOfSides) sides." } }

  练习

  通过 "let" 添加一个常量属性,以及添加另一个方法能接受参数。

  通过在类名后加小括号来创建类的实例。使用点语法来访问实例的属性和方法。

  var shape = Shape()

  shape.numberOfSides = 7

  var shapeDescription = shape.simpleDescription()

  这个版本的 Shape 类有些重要的东西不在:一个构造器来在创建实例时设置类。使用 init 来创建一个。

  class NamedShape {

  var numberOfSides: Int = 0

  var name: String init(name: String) {

  self.name = name

  } //by gashero

  func simpleDescription() -> String {

  return "A Shape with (numberOfSides) sides."

  }

  }

  注意 self 用来区分 name 属性和 name 参数。构造器的生命跟函数一样,除了会创建类的实例。每个属性都需要赋值,无论在声明里还是在构造器里。

  使用 deinit 来创建一个析构器,来执行对象销毁时的清理工作。

  子类包括其超类的名字,以冒号分隔。在继承标准根类时无需声明,所以你可以忽略超类。

  子类的方法可以通过标记 override 重载超类中的实现,而没有 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()

  练习

  编写另一个 NamedShape 的子类叫

悠悠鸟影视[www.aikan.tv/special/youyouniaoyingshi/]
做 Circle ,接受半径和名字到其构造器。实现 area 和 describe 方法。

  属性可以有 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")

  triangle.perimeter

  triangle.perimeter = 9.9

  triangle.sideLength

  在 perimeter 的 setter 中,新的值的名字就是 newValue 。你可以提供一个在 set 之后提供一个不冲突的名字。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表