//: 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.")

}

Option可选值可选值(二)的更多相关文章

  1. bootstrap selectpicker 通过代码指定选中值 BootStrap selectpicker后台动态绑定数据 selectpicker 获取选中option的属性或者值

    bootstrap-select使用 bootstrap selectpicker 通过代码指定选中值 $('#subjectno').selectpicker('val',(row.subjectn ...

  2. Jquery获取select option动态添加自定义属性值失效

    Jquery获取select option动态添加自定义属性值失效 2014/12/31 11:49:19 中国学网转载 编辑:李强 http://www.xue163.com/588880/3909 ...

  3. 获取HTML网页中option标签元素的值

    在进行表单元素的操作时,难免会遇到对option元素的挑选,下面的示例代码能够很好的获取到你option元素选择的值,如果要传递给后端,可通过ajax或者其他方式传递即可. 示例代码 <!doc ...

  4. NPOI EXECL数据导入,日期格式调用DateCellValue取值时,二次或后续调用出现报错!

    NPOI version:2.5.1 EXCEL数据导入功能,第一次调用DateCellValue获得日期值OK,二次或后续调用出现报错"函数求值需要运行所有线程" 初步怀疑是版本 ...

  5. 左值&右值

    一.引子 我们所谓的左值.右值,正确的说法应该是左值表达式.右值表达式. 因为C++的表达式不是左值就是右值. 在C中,左值指的是既能够出现在等号左边也能出现在等号右边的表达式,右值指的则是只能出现在 ...

  6. c++ 左值右值 函数模板

    1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...

  7. C++ 左值 右值

    最近在研究C++ 左值 右值,搬运.收集了一些别人的资料,供自己记录和学习,若以后看到了更好的解释,会继续补充.(打“?”是我自己不明白的地方 )   参考:<Boost程序库探秘——深度解析C ...

  8. java将map拼接成“参数=值&参数=值”

    Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...

  9. C++ 左值与右值 右值引用 引用折叠 => 完美转发

    左值与右值 什么是左值?什么是右值? 在C++里没有明确定义.看了几个版本,有名字的是左值,没名字的是右值.能被&取地址的是左值,不能被&取地址的是右值.而且左值与右值可以发生转换. ...

  10. Jmeter的JDBC Request,sql参数化及返回值取值

    1.JDBC Request面板 Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字 ...

随机推荐

  1. 转 C++的常量引用

    C++的常量引用 如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.对常量的引用可以用其它任何引用来初始化:但不能改变. 关 ...

  2. java基于udp实现键盘录入聊天

    发送端 package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Data ...

  3. hdu 4956(思路题)

    Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. cdq分治解决区间问题

    如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

  5. BZOJ 1188 [HNOI2007]分裂游戏

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 学习SG函数的过程中,我先看了一篇叫做 <2008-贾志豪-组合数学略述... ...

  6. Dcokerfile 参考

    Dcokerfile 包含了所有用来组装image的命令.通过docker build来自动创建image.   用法 需要指定本地路径作为上下文目录,路径是本地系统的目录.而docker build ...

  7. DotnetBrowser高级教程-(4)使用MVC框架1-搭建基础框架

    我们这次重点介绍下MVC框架的使用. 如果您之前使用过微软的mvc web框架,那么dotnetbrowser的mvc框架相信您也会很快上手,两者之间相似度约有80%. 所谓的mvc,以一个例子为例: ...

  8. ylb:了解存储过程

    ylbtech-SQL Server:SQL Server-了解存储过程 了解存储过程 ylb:了解存储过程 返回顶部 存储过程 2.2.1 主要的编程结构: 变量 数据类型 输入/输出变量 返回值 ...

  9. linux系统故障分析与排查

    在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键.熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点.“对 ...

  10. 做dg时遇到的log_archive_dest、log_archive_dest_1、db_recovery_file_dest之间互相影响

    前提:归档开启.默认不指定归档文件夹. 今晚遇到客户那里设置了闪回区和log_archive_dest.不停库做DG时,无法指定log_archive_dest_n參数,巨坑. .实验了下.结论例如以 ...