Swift中文教程2
来源:互联网 发布:dcs控制系统与cms 编辑:程序博客网 时间:2024/05/22 05:21
函数和闭包
函数
Swift使用func关键字声明函数:
- func greet(name: String, day: String) -> String {
- return "Hello \(name), today is \(day)."
- }
- greet("Bob", "Tuesday")
通过元组(Tuple)返回多个值:
- func getGasPrices() -> (Double, Double, Double) {
- return (3.59, 3.69, 3.79)
- }
- getGasPrices()
支持带有变长参数的函数:
- func sumOf(numbers: Int...) -> Int {
- var sum = 0
- for number in numbers {
- sum += number
- }
- return sum
- }
- sumOf()
- sumOf(42, 597, 12)
函数也可以嵌套函数:
- func returnFifteen() -> Int {
- var y = 10
- func add() {
- y += 5
- }
- add()
- return y
- }
- returnFifteen()
作为头等对象,函数既可以作为返回值,也可以作为参数传递:
- func makeIncrementer() -> (Int -> Int) {
- func addOne(number: Int) -> Int {
- return 1 + number
- }
- return addOne
- }
- var increment = makeIncrementer()
- increment(7)
- func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
- for item in list {
- if condition(item) {
- return true
- }
- }
- return false
- }
- func lessThanTen(number: Int) -> Bool {
- return number < 10
- }
- var numbers = [20, 19, 7, 12]
- hasAnyMatches(numbers, lessThanTen)
闭包
本质来说,函数是特殊的闭包,Swift中可以利用{}声明匿名闭包:
- numbers.map({
- (number: Int) -> Int in
- let result = 3 * number
- return result
- })
当闭包的类型已知时,可以使用下面的简化写法:
- numbers.map({ number in 3 * number })
此外还可以通过参数的位置来使用参数,当函数最后一个参数是闭包时,可以使用下面的语法:
- sort([1, 5, 3, 12, 2]) { $0 > $1 } 类和对象 创建和使用类
Swift使用class创建一个类,类可以包含字段和方法:
- class Shape {
- var numberOfSides = 0
- func simpleDescription() -> String {
- return "A shape with \(numberOfSides) sides."
- }
- }
创建Shape类的实例,并调用其字段和方法。
- var shape = Shape()
- shape.numberOfSides = 7
- varshapeDescription = shape.simpleDescription()
通过init构建对象,既可以使用self显式引用成员字段(name),也可以隐式引用(numberOfSides)。
- class NamedShape {
- var numberOfSides: Int = 0
- var name: String
- init(name: String) {
- self.name = name
- }
- func simpleDescription() -> String {
- return "A shape with \(numberOfSides) sides."
- }
- }
使用deinit进行清理工作。
继承和多态
Swift支持继承和多态(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()
注意:如果这里的simpleDescription方法没有被标识为override,则会引发编译错误。
属性
为了简化代码,Swift引入了属性(property),见下面的perimeter字段:
- 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 triagle with sides of length \(sideLength)."
- }
- }
- var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
- triangle.perimeter
- triangle.perimeter = 9.9
- triangle.sideLength
注意:赋值器(setter)中,接收的值被自动命名为newValue。
willSet和didSet
EquilateralTriangle的构造器进行了如下操作:
为子类型的属性赋值。 调用父类型的构造器。 修改父类型的属性。
如果不需要计算属性的值,但需要在赋值前后进行一些操作的话,使用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")
- triangleAndSquare.square.sideLength
- triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
- triangleAndSquare.triangle.sideLength
从而保证triangle和square拥有相等的sideLength。
0 0
- Swift中文教程2
- 【Swift中文教程】--关于Swift
- Swift中文教程
- Swift中文教程1
- Swift中文教程3
- Swift中文教程 -- 函数
- 【Swift中文教程】--基础
- swift语言中文教程
- 【Swift中文教程】--开始Swift之旅
- 【Swift中文教程】-- 集合类型
- 【Swift中文教程】-- 控制流
- ios开发 - Swift中文教程
- Swift语言教程中文文档
- 【Swift】—— 中文教程
- Swift中文教程的网址
- Swift语言教程中文文档
- Apple Swift编程语言入门中文教程
- Swift中文教程(一)基础数据类型
- 06年写的粒子编辑器
- Swift中文教程1
- 分析和解决mnesia过载问题
- Tomcat优化
- ALSA安装编程指南
- Swift中文教程2
- python: 读写文件
- js阻止默认方法
- 在Eclipse中配置NDK自动编译环境builders
- linux用户管理
- Swift中文教程3
- java -多态--向上转型
- Webdriver 处理display:none
- struts2返回json数据类型