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.")
}
Option可选值可选值(二)的更多相关文章
- bootstrap selectpicker 通过代码指定选中值 BootStrap selectpicker后台动态绑定数据 selectpicker 获取选中option的属性或者值
bootstrap-select使用 bootstrap selectpicker 通过代码指定选中值 $('#subjectno').selectpicker('val',(row.subjectn ...
- Jquery获取select option动态添加自定义属性值失效
Jquery获取select option动态添加自定义属性值失效 2014/12/31 11:49:19 中国学网转载 编辑:李强 http://www.xue163.com/588880/3909 ...
- 获取HTML网页中option标签元素的值
在进行表单元素的操作时,难免会遇到对option元素的挑选,下面的示例代码能够很好的获取到你option元素选择的值,如果要传递给后端,可通过ajax或者其他方式传递即可. 示例代码 <!doc ...
- NPOI EXECL数据导入,日期格式调用DateCellValue取值时,二次或后续调用出现报错!
NPOI version:2.5.1 EXCEL数据导入功能,第一次调用DateCellValue获得日期值OK,二次或后续调用出现报错"函数求值需要运行所有线程" 初步怀疑是版本 ...
- 左值&右值
一.引子 我们所谓的左值.右值,正确的说法应该是左值表达式.右值表达式. 因为C++的表达式不是左值就是右值. 在C中,左值指的是既能够出现在等号左边也能出现在等号右边的表达式,右值指的则是只能出现在 ...
- c++ 左值右值 函数模板
1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...
- C++ 左值 右值
最近在研究C++ 左值 右值,搬运.收集了一些别人的资料,供自己记录和学习,若以后看到了更好的解释,会继续补充.(打“?”是我自己不明白的地方 ) 参考:<Boost程序库探秘——深度解析C ...
- java将map拼接成“参数=值&参数=值”
Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...
- C++ 左值与右值 右值引用 引用折叠 => 完美转发
左值与右值 什么是左值?什么是右值? 在C++里没有明确定义.看了几个版本,有名字的是左值,没名字的是右值.能被&取地址的是左值,不能被&取地址的是右值.而且左值与右值可以发生转换. ...
- Jmeter的JDBC Request,sql参数化及返回值取值
1.JDBC Request面板 Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字 ...
随机推荐
- c语言中的main函数讨论
**从刚开始写C程序,相比大家便开始写main()了.虽然无数的教科书和老师告诉我们main是程序的入口.那么main函数是怎么被调用的,怎么传入参数,返回的内容到哪里了,返回的内容是什么?接下来我们 ...
- [转]在Storyboard中使用自定义的segue类型
转自:http://my.oschina.net/u/728866/blog/92709 我们知道segue共有三种类型:push.modal以及custom.如下图: 很明显,这三种类型的作用分 ...
- LeetCode OJ-- Balanced Binary Tree ***
https://oj.leetcode.com/problems/balanced-binary-tree/ 判断一个二叉树,是否为平衡的.如果是平衡的,则它的每个子树的左右子树高度差不大于1. 递归 ...
- 【转载】Outlook2010 移动数据文件到其它地方
您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...
- 爬虫学习笔记(三)requests模块使用
前面在说爬虫原理的时候说了,就写代码自动化的获取数据,保存下来数据,那怎么写代码来请求一个网址,获取结果呢,就得用requests模块了. 这篇博客说一下requests模块的使用,requests模 ...
- Codeforces 897 C.Nephren gives a riddle-递归
C. Nephren gives a riddle time limit per test 2 seconds memory limit per test 256 megabytes input ...
- HDFS读文件过程分析:读取文件的Block数据
转自http://shiyanjun.cn/archives/962.html 我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStrea ...
- SQLite复杂表的更新方式
SQLite复杂表的更新方式 在SQLite中,如果早期设计的表无法满足需要,就需要对表进行更新,如修改名字.添加列.如果针对简单表,修改起来相对容易,直接使用提供的ALTER命令即可.但是如果该 ...
- CSS定位与布局:浮动
浮动的特点 浮动(float)属性提出的作用是实现文字的环绕效果,一个元素浮动后,会脱离普通流.主要的特点如下: 浮动的元素会向左或者向右移动直到它的外边缘接触容器框(containing blo ...
- 审查php.ini自动分析程序
源码 https://github.com/sektioneins/pcc 使用方法 环境: mac cli 命令行执行 git clone https://github.com/sektionein ...