19. Enums
enum BloodType {
case A, B, O, AB
}
!
struct Person {
var bloodType: BloodType
}
!
var p = Person(bloodType: BloodType.A)
var q = Person(bloodType: .A)
q.bloodType = .AB
21. with associated values
/// UIҪؤָenum
enum DialogItem {
case TextButton(title: String, identifier: String)
case GrayButton(title: String, identifier: String)
case Text(String)
case Title(String)
case Margin(CGFloat)
case Group([DialogItem])
}
!
let item1 = DialogItem.Margin(20)
let item2 = DialogItem.Text("String")
23. Switchǂչ_
switch item {
case let .Title(title):
println("Title: (title)")
case let .Text(text):
println("Text: (text)")
case let .TextButton(title: title, identifier: identifier):
///
case let .GrayButton(title: title, identifier: identifier):
///
case let .Group(subitems):
///
default: break
}
38. Optional Binding
var optionalInt: Int?
!
if let int = optionalInt { // int: Int
println("optionalInt was (int)")
} else {
println("optionalInt was nil")
}
!
var array = [1, 2, 3, 4]
while let item = array.last { // item: Int
println("(item)")
array.removeLast()
}
62. Failable Halve
Int Int?
// Ǹ줿뤱ɸʤä餢루ݤΤʤv
func failableHalve(x: Int) -> Int? {
if x % 2 == 0 {
return x / 2
} else {
return nil
}
}
!
if let a = failableHalve(x) {
println("Halve((x)) = (a)")
} else {
println("Failed")
}
63. Failable Halve Again
Int Int?
if let a = failableHalve(x) {
if let b = failableHalve(a) {
println("Halve^2((x)) = (b)")
} else {
println("Failed")
}
} else {
println("Failed")
}
Int Int?
64. Failable Halve The 3rd
Int Int?
if let a = failableHalve(x) {
if let b = failableHalve(a) {
if let c = failableHalve(b) {
println("Halve^3((x)) = (c)")
} else {
println("Failed")
}
} else {
println("Failed")
}
} else {
println("Failed")
}
Int Int? Int Int?
65. Failable Halve Chaining
Int Int?
if let a = failableHalve(x).chain(failableHalve).chain(failableHalve) {
println("Halve^3((x)) = (a)")
} else {
println("Failed")
}
Int? Int?
66. Failable Halve Chaining
Int Int?
Int? Int?
24
failableHalve(24) // Some 12
failableHalve(24).chain(failableHalve) // Some 6
failableHalve(24).chain(failableHalve).chain(failableHalve) // Some 3
failableHalve(24).chain(failableHalve).chain(failableHalve).chain(failableHalve) // nil
!
36
failableHalve(36) // Some 18
failableHalve(36).chain(failableHalve) // Some 9
failableHalve(36).chain(failableHalve).chain(failableHalve) // nil
failableHalve(36).chain(failableHalve).chain(failableHalve).chain(failableHalve) // nil
88. BFTask
doHeavyJobAsync1().continueWithBlock {
(task: BFTask!) -> BFTask in
let result = task.result as NSString
self.resultLabel1.text = result
self.resultLabel2.text = "I..."
return self.doHeavyJobAsync2(result)
}.continueWithBlock {
(task: BFTask!) -> BFTask in
let result = task.result as NSString
self.resultLabel2.text = result
self.resultLabel3.text = "I..."
return self.doHeavyJobAsync3(result)
}.continueWithBlock {
(task: BFTask!) -> AnyObject! in
let result = task.result as NSString
self.resultLabel3.text = result
return nil
}