Option可选值可选值(二)
//: 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.")
}
最新文章
- SlidingMenu的简单使用
- 【python】入门学习(二)
- C#_Fileuploadify_notMvc_description
- python 实现文件批量拷贝
- android ROM备份和还原,再也不用当心刷到垃圾ROM,而还原不了原有系统
- MSP430 中断优先级
- 沙湖王 | 用Scipy实现K-means聚类算法
- 设计模式-发布订阅模式(javaScript)
- MyEclipse10.0的破解过程详细及图解
- mysql的数据类型和字段属性
- 洛谷 P4878 [USACO05DEC]layout布局
- pandas DataFrame(2)-行列索引及值的获取
- 四: scrapy爬虫框架
- kernel中文件的读写操作可以使用vfs_read()和vfs_write
- djando 项目用django自己服务器在局域网中被访问设置
- Linux 目录流管理
- Oracle与SQLSERVER 批处理执行 DDL 语句
- JAVA代码保护从入门到放弃
- 2018用IDEA搭建SSM框架(Spring+SpringMVC+Mybatis)
- POJ1276:Cash Machine(多重背包)
热门文章
- android中提示&;对话框----Notification
- Django之model F/Q以及多对多操作
- 牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
- Codeforces Round #450 (Div. 2) B. Position in Fraction【数论/循环节/给定分子m 分母n和一个数c,找出c在m/n的循环节第几个位置出现,没出现过输出-1】
- SQLite添加列的限制
- Java开发笔记(一百零四)普通线程池的运用
- Displaying Tabbed and Stacked Canvas Using Show_View In Oracle Forms
- 【spring boot】配置文件 application.properties 属性解析
- Oracle Linux 6.4(BOND)双网卡绑定实战—附加说明
- Fresco框架SimpleDraweeView控件的简单使用