时间: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 的部分匹配来选择的。
苹果前不久发布了最新的iOS 8.4.1系统更新,封堵了目前iOS 8.4系统的越狱漏洞,但是有不少用户升级到iOS 8.4.1以后,遇到了耗电严重的现象,在苹果的技术支持论坛上,已经有不少用户反映了iOS 8.4.1的耗电问题。
16777215今天早些时候,苹果正式推出了新的系统更新,而它就是iOS 8.4.1,如果不出意外,这将是iOS 9发布前,最后一个系统更新了。
16777215苹果在今天凌晨向开发者发布了 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就在昨晚11点钟,苹果向用户推送了iOS8.4 的正式版本,但仅过不到一个小时,来自中国的PP越狱助手团队就宣布iOS8.4正式版成功完美越狱!这也创造了iOS系统正式版越狱时间最快的历史记录。今天小编就为大家带来iOS8.4的越狱教程,希望能大家喜欢!
16777215太极越狱工具现在支持ios8.1.3~8.3完美越狱啦,并且支持全系列苹果设备,鉴于目前iOS8.3版系统相对稳定,所以有很多果粉们都跃跃欲试,有不少果粉因为电脑没有装苹果驱动及其他原因会出现8.3越狱卡20%的问题,也就是ios8.3越狱卡在百分之20就不动了。小编找到了很好的解决方法,下面提供给大家。
16777215中国太极团队刚刚发布了iOS 8.1.3-8.3完美越狱工具,全球第一个攻克了iOS 8.3。虽然现在的iOS越狱已经有很简单,但毕竟是刚刚发布,仍然需要注意不少问题。
14237696苹果今天向开发者发布了 iOS 8.4 第一个测试版,距离 iOS 8.3 正式版发布仅仅相隔5天。这次的测试版编译号为 12H407d,开发者可以在 iOS 开发者中心下载,此外,苹果还发布了 Xcode 6.4 测试版。iOS 8.4 包含全新设计的音乐应用,演唱者界面包含全新设计展示歌手的图片,还有个性化的播放列表。全新音乐应用包含迷你播放器,全新设计的“正在播放”,全局搜索方方便用户在应用任意界面发起搜索,以及简化了 iTunes 广播的设计。
16777215越狱无非是为了让自己的 iOS 设备用起来更舒服,那么怎样才能更舒服呢?换个自己喜欢的字体、换个美化了的图标都可以,现在现如今iOS 8.1.2都可以完美越狱了,还带等什么赶紧去换字体去,至于那些不会换字体的亲们,小编现在就来教你怎么换!
16777215苹果今天发布了 iOS 8.3 升级补丁,这是 iOS 8 系统发布后第三个重大升级。iOS 8.3 第一个测试版在今年2月发送给开发者,公共测试版在今年3月发布。iOS 8.3 增加了很多新功能并改进了系统的设计。目前,用户可以通过 OTA 无线升级。此外,苹果还为 Apple TV 准备了7.2 软件升级。
16777215苹果今天发布了 iOS 8.3 第一册测试版,而一周前发布的 iOS 8.2 第五个测试版也正在测试之中。iOS 8.3 的编译号为12F5027d,这次发布的还包括 Xcode 6.3 测试版以及 Swift 1.2。根据测试,iOS 8.3 似乎移除了 iCloud 照片图库的测试标识,并开始提供全新CarPlay 功能,也就是无线连接。
2772992