//: Playground - noun: a place where people can play
import Cocoa
var str1 = "供选链接和强制拆包的不同。"
class Person {
var residence: Residence?//供选连接
}
class Residence {
var rooms = [Room]()
var numberOfRooms: Int {
return rooms.count
}
subscript(i: Int) -> Room {
return rooms[i]
}
func printNumberOfRooms() {
println("The number of rooms is \(numberOfRooms)")
}
var address: Address?
}
//如果你创建一个新的 Person 实例,它的 residence 属性由于是被定义为供选的,此属性将默认初始化为空:
//let john = Person()
/*
如果你想使用声明符!强制拆包获得这个人 residence 属性 numberOfRooms 属性值,将会引发运行时错误,因为这时没有可以供拆包的 residence 值。
*/
//let roomCount = john.residence!.numberOfRooms
//供选链接提供了一种另一种获得 numberOfRooms 的方法。利用供选链接,使用问号来代替原来!的位置:
//let roomCount = john.residence?.numberOfRooms
/*
if let roomCount = john.residence?.numberOfRooms {
println("john‘s residence has \(roomCount) room(s).")
} else {
println("Unable to retrieve the of rooms.")
}
john.residence = Residence()
if let roomCount = john.residence?.numberOfRooms {
println("john‘s residence has \(roomCount) room(s).")
} else {
println("Unable to retrieve the of rooms.")
}*/
/*
为供选链接定义模型类
这些类是由上面的 Person 和 Residence 模型通过添加一个 Room 和一个 Address 类拓展来。
*/
class Room {
let name: String
init(name: String) {
self.name = name
}
}
class Address {
var buildingName: String?
var buildingNubmer: String?
var street: String?
func buildingIdentifier() -> String? {
if (buildingName != nil) {
return buildingName
} else if (buildingNubmer != nil) {
return buildingNubmer
} else {
return nil
}
}
}
//通过供选链接调用属性
let john = Person()
if let roomCount = john.residence?.numberOfRooms {
println("John‘s residence has \(roomCount) room(s).")
} else {
println("Unable to retrieve the number of rooms.")
}
//通过供选链接调用方法
var uu = 9
if(john.residence?.printNumberOfRooms() != nil) {
println("It was possible to print the number of rooms.")
} else {
println("It was not possible to print the number of rooms.")
}
//使用供选链接调用角标
if let firstRoomName = john.residence?[0].name {
println("The first room name is \(firstRoomName).")
} else {
println("Unable to retrieve the first room name.")
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wa1065908163/article/details/46710967