//: 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 =
].name {

println("The first room name is
\(firstRoomName).")

}
else {

println("Unable to retrieve the first room name.")

}

最新文章

  1. SlidingMenu的简单使用
  2. 【python】入门学习(二)
  3. C#_Fileuploadify_notMvc_description
  4. python 实现文件批量拷贝
  5. android ROM备份和还原,再也不用当心刷到垃圾ROM,而还原不了原有系统
  6. MSP430 中断优先级
  7. 沙湖王 | 用Scipy实现K-means聚类算法
  8. 设计模式-发布订阅模式(javaScript)
  9. MyEclipse10.0的破解过程详细及图解
  10. mysql的数据类型和字段属性
  11. 洛谷 P4878 [USACO05DEC]layout布局
  12. pandas DataFrame(2)-行列索引及值的获取
  13. 四: scrapy爬虫框架
  14. kernel中文件的读写操作可以使用vfs_read()和vfs_write
  15. djando 项目用django自己服务器在局域网中被访问设置
  16. Linux 目录流管理
  17. Oracle与SQLSERVER 批处理执行 DDL 语句
  18. JAVA代码保护从入门到放弃
  19. 2018用IDEA搭建SSM框架(Spring+SpringMVC+Mybatis)
  20. POJ1276:Cash Machine(多重背包)

热门文章

  1. android中提示&对话框----Notification
  2. Django之model F/Q以及多对多操作
  3. 牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
  4. Codeforces Round #450 (Div. 2) B. Position in Fraction【数论/循环节/给定分子m 分母n和一个数c,找出c在m/n的循环节第几个位置出现,没出现过输出-1】
  5. SQLite添加列的限制
  6. Java开发笔记(一百零四)普通线程池的运用
  7. Displaying Tabbed and Stacked Canvas Using Show_View In Oracle Forms
  8. 【spring boot】配置文件 application.properties 属性解析
  9. Oracle Linux 6.4(BOND)双网卡绑定实战—附加说明
  10. Fresco框架SimpleDraweeView控件的简单使用