//: 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. Windows开发

    1. 介绍 这里简单介绍了Windows应用程序开发的基础知识 2. 基础 Windows下的应用程序有控制台程序和Win32窗口程序,这里讲的是Win32窗口程序 Windows提供了相关静态库(L ...

  2. 移动GIS技术在城市信息采集中的应用

    1 引言 随着移动平板电脑和手机(以下简称移动终端)在软硬件上的更新换代,和3G.4G通讯网络的升级,传统测绘和和数据服务方式正在发生巨大变化.以城市中的外业踏勘和信息采集为例,移动终端正成为主要的外 ...

  3. asp.net mvc 5 利用ActionFilterAttribute实现权限过滤

    关于c#属性的教程:http://www.runoob.com/csharp/csharp-attribute.html 在asp.net mvc5中,可以利用ActionFilterAttribut ...

  4. BZOJ4017 小Q的无敌异或(位运算)

    题目链接 小Q的无敌异或 好久之前做的这道题了……参照了别人的博客……还是没有全懂. 第一个问题维护个前缀就好了,第二个问题还要用树状数组维护…… #include <bits/stdc++.h ...

  5. SpringBoot第十一篇:SpringBoot+MyBatis+Thymelaf实现CRUD

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10936304.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   总结前面几 ...

  6. 机器学习(4):数据分析的工具-pandas的使用

    前面几节说一些沉闷的概念,你若看了估计已经心生厌倦,我也是.所以,找到了一个理由来说一个有兴趣的话题,就是数据分析.是什么理由呢?就是,机器学习的处理过程中,数据分析是经常出现的操作.就算机器对大量样 ...

  7. 10.1综合强化刷题 Day7

                                                                                       noip提高组模拟赛       ...

  8. 暂停时间 以及dict 循环

    暂停时间 #!/usr/bin/python # -*- coding: UTF-8 -*- import time myD = {1: 'a', 2: 'b'} for key, value in ...

  9. Java线程池原理解读

    引言 引用自<阿里巴巴JAVA开发手册> [强制]线程资源必须通过线程池提供,不允许在应用中自行显式创建线程. 说明:使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销 ...

  10. 2016集训测试赛(二十)Problem A: Y队列

    Solution 考虑给定一个\(n\), 如何求\(1\)到\(n\)的正整数中有多少在队列中. 不难注意到我们只需要处理质数次方的情况即可, 因为合数次方会被其因数处理到. 同时我们考虑到可能存在 ...