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

   使用 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 的子类叫做 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 之后提供一个不冲突的名字。

  注意 EquilateralTriangle 的构造器有3个不同的步骤:

  设置属性的值 调用超类的构造器 改变超类定义的属性的值,添加附加的工作来使用方法、getter、setter也可以在这里

  如果你不需要计算属性,但是仍然要提供在设置值之后执行工作,使用 willSet 和 didSet 。例如,下面的类要保证其三角的边长等于矩形的变长。

  class TriangleAndSquare {

  var triangle: EquilaterTriangle {

  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 = EquilaterTriangle(sideLength: size, name: name)

  }

  }

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

  triangleAndSquare.square.sideLength

  triangleAndSquare.triangle.sideLength

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

  triangleAndSquare.triangle.sideLength

  类的方法与函数有个重要的区别。函数的参数名仅用与函数,但方法的参数名也可以用于调用方法(除了第一个参数)。缺省时,一个方法有一个同名的参数,调用时就是参数本身。你可以指定第二个名字,在方法内部使用。

  class Counter {

  var count: Int = 0

  func incrementBy(amount: Int, numberOfTimes times: Int) {

  count += amount * times

  }

  }

  var counter = Counter()

  counter.incrementBy(2, numberOfTimes: 7)

  当与可选值一起工作时,你可以写 "?" 到操作符之前类似于方法属性。如果值在"?"之前就已经是 nil ,所有在 "?" 之后的都会自动忽略,而整个表达式是 nil 。另外,可选值是未包装的,所有 "?" 之后的都作为未包装的值。在两种情况中,整个表达式的值是可选值。

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

  let sideLength = optionalSquare?.sideLength

时间: 2024-08-01 16:46:25

Swift编程语言入门之对象与类的相关文章

Swift初体验之HelloWord+苹果Swift编程语言入门教程【中文版】

AppDelegate.swift : <span style="font-size:24px;"><strong>// // AppDelegate.swift // SwiftHelloWord // // Created by jason on 14-6-5. // Copyright (c) 2014年 JasonApp. All rights reserved. // import UIKit @UIApplicationMain class AppD

Swift 编程语言入门教程_Swift

原文地址:http://gashero.iteye.com/blog/2075324 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Obj

Swift中文教程(五)对象和类

Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } 练习: 用let关键字添加一个常量属性,添

swift编程语言入门介绍

  swift是什么? swift是苹果于wwdc 2014发布的编程语言,这里引用the swift programming language的原话: swift is a new programming language for ios and os x apps that builds on the best of c and objective-c without the constraints of c compatibility. swift adopts safe programm

《Swift开发实战》——第2章,第2.5节对象和类

2.5 对象和类 在Swift语言中,使用关键字class和类名来创建一个类.在类中声明属性的方法和声明常量.变量的方法一样,唯一的区别就是它们的上下文是类.同样,声明方法和声明函数的方法也一样.例如,下面的演示代码定义了一个名为Shape的类. class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides."

Swift教程_零基础学习Swift完整实例(三)_swift基础(对象和类、枚举和结构、协议和扩展、泛型)

4.对象和类(Objects and Classes) 1.同Java一致,使用class和类名来创建一个类. 2.使用init创建一个构造方法,使用deinit创建一个析构方法,通过构造方法来初始化类实例.创建类实例同java一致,在类名后面加上()(实际是调用无参数的构造方法init(),构造方法也可以带参数).使用.来访问实例的属性和方法. [objc] view plain copy class NamedShape {       var numberOfSides: Int = 0/

「玩一玩」Swift编程语言(中文版)(拜读原文中,未完待续)

问题描述 持续更新的博客地址:原文可以在iTunes免费下载远远没有完成.我还真是贱哪.不知道发到哪个板块,就随便在这里发一下了.感觉C#论坛快被我当成记事本了.前言今天Apple发布了新的编程语言Swift,也提供了一本将近400页的TheSwiftProgrammingLanguage(Swift编程语言).虽然我没有开发者账号,没法实际上机练习Swift代码,但这不影响我阅读这本书,以及用铅笔在纸上运行这些小程序.Apple的东西如此之火爆,Swift一经推出大家纷纷转投iOS/OSX怀抱

Swift hello world!Swift快速入门教程_Swift

通常来说,编程语言教程中的第一个程序应该在屏幕上打印"Hello, world".在 Swift 中,可以用一行代码实现: 复制代码 代码如下: println("hello, world") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式--在 Swift 中,这行代码就是一个完整的程序.你不需要为了输入输出或者字符串处理导入一个单独的库.全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数.你同样不需要在每个语句结尾

java 某个类的几个对象,这些对象调用类中一个函数,是各自拥有自己的函数代码还是使用同一段代码?

问题描述 1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?2.java 继承中,子类从父类得到一些普通函数,这些函数的代码,是子类自己独自拥有一份还是和父类使用同一段函数代码.3.第一次发帖,积分什么的不会搞,貌似自己也没有积分,呵呵,大家包涵! 解决方案 引用1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?这几个对象调用的当然是同一段代码了.jvm中有一个ja