您的位置:首页 > 运维架构

Option可选值可选值(二)

2015-07-01 15:38 246 查看
//: 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 {
 
c89b
 
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.")
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  option 可选