您所在的位置: 首页 > 教程首页 > 新闻资讯 > 苹果Swift语言入门教程

苹果Swift语言入门教程

来源:互联网 | 编辑:啤酒 | 时间:2014-06-03 20:28:33 | 阅读:16777215

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)

函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。

numbers.map({

(number: Int) -> Int in

let result = 3 * number

return result

})

Note

练习

重写一个闭包来对所有奇数返回0。

编写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两者。单一语句的闭包可以直接返回值。

numbers.map({number in 3 * number})

你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。

sort([1, 5, 3, 12, 2]) { $0 > $1 }

6   对象与类

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

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

Note

练习

通过 "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()

Note

练习

编写另一个 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 之后提供一个不冲突的名字。

你可能感兴趣的内容

  • 2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览
    2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览
    1、夏天出汗多,每次洗澡得多用几次沐浴露,这种做法?2、所有“脱发人士”都适合做植发手术吗?这里52z飞翔网小编为大家带来2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-08-16

  • 2021山东高考分数线全批次一览
    2021山东高考分数线全批次一览
    2021山东高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021山东高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021福建高考分数线全批次一览
    2021福建高考分数线全批次一览
    2021福建高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021福建高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021浙江高考分数线全批次一览
    2021浙江高考分数线全批次一览
    2021浙江高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021浙江高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021宁夏高考分数线全批次一览
    2021宁夏高考分数线全批次一览
    2021宁夏高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021宁夏高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021青海高考分数线全批次一览
    2021青海高考分数线全批次一览
    2021青海高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021青海高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021甘肃高考分数线全批次一览
    2021甘肃高考分数线全批次一览
    2021甘肃高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021甘肃高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021陕西高考分数线全批次一览
    2021陕西高考分数线全批次一览
    2021陕西高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021陕西高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021西藏高考分数线全批次一览
    2021西藏高考分数线全批次一览
    2021西藏高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021西藏高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021云南高考分数线全批次一览
    2021云南高考分数线全批次一览
    2021云南高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021云南高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

热门游戏

下载声明 | 法律声明 | 版权声明 | 友情链接 | 发布软件 | 最新更新

本站为非盈利性网站,不接受任何广告。本站所有资源均由网友上传,如有侵权,请发邮件至 hnrshwl@163.com

晋ICP备2024046785号-1