苹果Swift语言入门教程

时间:2014-06-03 20:28:33  作者:啤酒  阅读:16777215

注意 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

7   枚举与结构

使用 enum 来创建枚举。有如类和其他命名类型,枚举可以有方法。

enum Rank: Int {

case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King

func simpleDescrition() -> String {

switch self {

case .Ace: return "ace"

case .Jack: return "jack"

case .Queen: return "queen"

case .King: return "king"

default: return String(self.toRaw())

}

}

}

let ace = Rank.Ace //by gashero

let aceRawValue = ace.toRaw()

Note

练习

编写一个函数比较两个 Rank 的值,通过比较其原始值。

在如上例子中,原始值的类型是 Int 所以可以只指定第一个原始值。其后的原始值都是按照顺序赋值的。也可以使用字符串或浮点数作为枚举的原始值。

使用 toRaw 和 fromRaw 函数可以转换原始值和枚举值。

if let convertedRank = Rank.fromRaw(3) { let threeDescription = convertedRank.simpleDescription() }

枚举的成员值就是实际值,而不是其他方式写的原始值。实际上,有些情况是原始值,就是你不提供的时候。

enum Suit {

case Spades, Hearts, Diamonds, Clubs

func simpleDescription() -> String {

switch self {

case .Spades: return "spades"

case .Hearts: return "hearts"

case .Diamonds: return "dismonds"

case .Clubs: return "clubs"

}

}

}

let hearts = Suit.Hearts //by gashero

let heartsDescription = hearts.simpleDescription()

Note

练习

添加一个 color 方法到 Suit 并在 spades 和 clubs 时返回 "black" ,并且给 hearts 和 diamounds 返回 "red" 。

注意上面引用Hearts成员的两种方法:当赋值到 hearts 常量时,枚举成员 Suit.Hearts 通过全名引用,因为常量没有明确的类型。在 switch 中,枚举通过 .Hearts 引用,因为 self 的值是已知的。你可以在任何时候使用方便的方法。

使用 struct 创建结构体。结构体支持多个与类相同的行为,包括方法和构造器。一大重要的区别是代码之间的传递总是用拷贝(值传递),而类则是传递引用。

struct Card {

var rank: Rank

var suit: Suit

func simpleDescription() -> String {

return "The \(rank.simpleDescription()) of \

(suit.simpleDescription())"

}

}

let threeOfSpades = Card(rank: .Three, suit: .Spades)

let threeOfSpadesDescription = threeOfSpades.simpleDescription()

Note

练习

添加方法到 Card 类来创建一桌的纸牌,每个纸牌都有合并的rank和suit。(就是个打字员的活二,by gashero)。

一个枚举的实例成员可以拥有实例的值。相同枚举成员实例可以有不同的值。你在创建实例时赋值。指定值和原始值的区别:枚举的原始值与其实例相同,你在定义枚举时提供原始值。

例如,假设情况需要从服务器获取太阳升起和降落时间。服务器可以响应相同的信息或一些错误信息。

enum ServerResponse {

case Result(String, String)

case Error(String)

}

let success = ServerResponse.Result("6:00 am", "8:09 pm")

let failure = ServerResponse.Error("Out of cheese.")

switch success {

case let .Result(sunrise, sunset):

let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."

case let .Error(error):

let serverResponse = "Failure... \(error)"

}

Note

练习

给 ServerResponse 添加第三种情况来选择。

注意日出和日落时间实际上来自于对 ServerResponse 的部分匹配来选择的。

电脑
大小:MB  时间:01.01  赞:

相关文章

  • iOS8.4.1耗电严重解决办法
    iOS8.4.1耗电严重解决办法

    苹果前不久发布了最新的iOS 8.4.1系统更新,封堵了目前iOS 8.4系统的越狱漏洞,但是有不少用户升级到iOS 8.4.1以后,遇到了耗电严重的现象,在苹果的技术支持论坛上,已经有不少用户反映了iOS 8.4.1的耗电问题。

    16777215
  • iOS8.4.1正式版下载
    iOS8.4.1正式版下载

    今天早些时候,苹果正式推出了新的系统更新,而它就是iOS 8.4.1,如果不出意外,这将是iOS 9发布前,最后一个系统更新了。

    16777215
  • iOS8.4.1 beta版发布 越狱漏洞遭封堵
    iOS8.4.1 beta版发布 越狱漏洞遭封堵

    苹果在今天凌晨向开发者发布了 iOS 8.4.1 第一个测试版,距离 iOS 8.4 正式版发布相隔两周。iOS 8.4.1 可能是 iOS 8 最后一次版本更新,iOS 8.4.1 编译号为 12H304,可以在苹果开发者中心下载。目前,我们还不清楚 iOS 8.4.1 的改变,可能只是修复 Bug,至于大家所关心的iOS 8.4的越狱漏洞是否封堵,目前也是不得而知,期待开发者们公布消息。

    1015808
  • iOS8.4完美越狱图文教程
    iOS8.4完美越狱图文教程

    就在昨晚11点钟,苹果向用户推送了iOS8.4 的正式版本,但仅过不到一个小时,来自中国的PP越狱助手团队就宣布iOS8.4正式版成功完美越狱!这也创造了iOS系统正式版越狱时间最快的历史记录。今天小编就为大家带来iOS8.4的越狱教程,希望能大家喜欢!

    16777215
  • ios8.3越狱卡20%解决方法
    ios8.3越狱卡20%解决方法

      太极越狱工具现在支持ios8.1.3~8.3完美越狱啦,并且支持全系列苹果设备,鉴于目前iOS8.3版系统相对稳定,所以有很多果粉们都跃跃欲试,有不少果粉因为电脑没有装苹果驱动及其他原因会出现8.3越狱卡20%的问题,也就是ios8.3越狱卡在百分之20就不动了。小编找到了很好的解决方法,下面提供给大家。

    16777215
  • iOS 8.3狱详细教程
    iOS 8.3狱详细教程

    中国太极团队刚刚发布了iOS 8.1.3-8.3完美越狱工具,全球第一个攻克了iOS 8.3。虽然现在的iOS越狱已经有很简单,但毕竟是刚刚发布,仍然需要注意不少问题。

    14237696
  • iOS 8.4测试版功能大全
    iOS 8.4测试版功能大全

    苹果今天向开发者发布了 iOS 8.4 第一个测试版,距离 iOS 8.3 正式版发布仅仅相隔5天。这次的测试版编译号为 12H407d,开发者可以在 iOS 开发者中心下载,此外,苹果还发布了 Xcode 6.4 测试版。iOS 8.4 包含全新设计的音乐应用,演唱者界面包含全新设计展示歌手的图片,还有个性化的播放列表。全新音乐应用包含迷你播放器,全新设计的“正在播放”,全局搜索方方便用户在应用任意界面发起搜索,以及简化了 iTunes 广播的设计。

    16777215
  • iPhone字体美化教程
    iPhone字体美化教程

    越狱无非是为了让自己的 iOS 设备用起来更舒服,那么怎样才能更舒服呢?换个自己喜欢的字体、换个美化了的图标都可以,现在现如今iOS 8.1.2都可以完美越狱了,还带等什么赶紧去换字体去,至于那些不会换字体的亲们,小编现在就来教你怎么换!

    16777215
  • iOS 8.3更新内容介绍
    iOS 8.3更新内容介绍

    苹果今天发布了 iOS 8.3 升级补丁,这是 iOS 8 系统发布后第三个重大升级。iOS 8.3 第一个测试版在今年2月发送给开发者,公共测试版在今年3月发布。iOS 8.3 增加了很多新功能并改进了系统的设计。目前,用户可以通过 OTA 无线升级。此外,苹果还为 Apple TV 准备了7.2 软件升级。

    16777215
  • ios8.3 beta测试版固件官方下载
    ios8.3 beta测试版固件官方下载

    苹果今天发布了 iOS 8.3 第一册测试版,而一周前发布的 iOS 8.2 第五个测试版也正在测试之中。iOS 8.3 的编译号为12F5027d,这次发布的还包括 Xcode 6.3 测试版以及 Swift 1.2。根据测试,iOS 8.3 似乎移除了 iCloud 照片图库的测试标识,并开始提供全新CarPlay 功能,也就是无线连接。

    2772992