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 =
john.residence?[0].name {

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

}
else {

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

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 18:31:15

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

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

Jquery获取select option动态添加自定义属性值失效 2014/12/31 11:49:19 中国学网转载 编辑:李强 http://www.xue163.com/588880/39096/390963333.html 为了帮助网友解决“Jquery获取select optio”相关的问题,中国学网通过互联网对“Jquery获取select optio”相关的解决方案进行了整理,用户详细问题包括:jqueryselectie9  function GetFenceItemData(

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

bootstrap-select使用 bootstrap selectpicker 通过代码指定选中值 $('#subjectno').selectpicker('val',(row.subjectno)); row.subjectno替换成你要指定的值,当然前提必须要在select已有的数据中 selectpicker 获取选中option的属性或者值 BootStrap selectpicker后台动态绑定数据

[Swift]学习笔记-可选类型/可选链

可选类型/可选链                        Make-by-LJW ---转载请注明出处... 它的可选性体现于请求或调用的目标当前可能为空(nil) 如果可选的目标有值,那么调用就会成功: 如果选择的目标为空(nil),则这种调用将返回空(nil) 多次调用被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效. 因为可选链的结果可能为nil,可能有值.因此它的返回值是一个可选类型. 可以通过判断返回是否有值来判断是否调用成功 有值,说明调用成功 为nil,

C++中的左值右值

对于 C++ 中的左值和右值,我们通常的说法是:当一个对象被用作右值的时候,用的是对象的值(内容):当对象被用作左值的时候,用的是对象的身份(在内存中的位置),这句话来自于 <C++ Primer 第五版> 第 121 页,那么,对于这句话,该作何理解呢?下面我想来谈谈我的看法: ISO C++03规定表达式必须是左值或右值之一,而在ISO C++11中,左值性被正式地扩充为更复杂的值类别,对于一个变量来说,与它相关的有两个部分:一是变量在内存中的地址,二是这个变量在内存中的地址中所存储的数据

电机系统标幺值基准值的选取

电机系统标幺化的好处: 对于不同功率.电压值的设备标幺值在一定范围内,具有可比性,而测量值则随之变化: 定点DSP控制:可有效防止数据溢出. 各个基值的选取方式如下: 电机系统标幺值基准值的选取,布布扣,bubuko.com

C++11之右值引用:从左值右值到右值引用

C++98中规定了左值和右值的概念,但是一般程序员不需要理解的过于深入,因为对于C++98,左值和右值的划分一般用处不大,但是到了C++11,它的重要性开始显现出来. C++98标准明确规定: 左值是可以取得内存地址的变量. 非左值即为右值. 从这里可以看出,可以执行&取地址的就是左值,其他的就是右值. 这里需要明确一点,能否被赋值不是区分C++左值和右值的区别. 我们给出四个表达式: string one("one"); const string two("two&

间隔年值不值,该不该

一些建议和参考资料 1. 关于间隔年的意义,值不值,该不该:没有对错,看你的价值观. 2. 关于自由和快乐:TED演讲:The Power of Time Off, by Stefan Sagmeister 3. 关于验证自己的想法:TED演讲: Why 30 is not a new 20, by Meg Jay 4. 我不认为间隔年是年轻人的专利,所以通篇都没有把间隔年和年轻人联系起来.每个人在每个人生的阶段,无论有多大的责任,都有为自己选择休息.探索和自由的权利,获得继续前进的力量.

从豌豆荚到豆瓣 情怀拖延病值不值?

对于怀揣梦想的企业来说,总是会遇到情怀与现实"打架"的问题.那些能够获得成功的企业,往往是将情怀放置一旁,先赚钱再说.而那些将情怀看得比天还大的企业,往往混得不如意,甚至有被收购.倒闭的风险.市场竞争的残酷,就是这么鲜血淋漓.近日豌豆荚被阿里巴巴收购.豆瓣商业化不断遇到险阻等,就是最典型的例子. 这些犯了情怀拖延病的企业从感性的角度来看,是值得尊重的.毕竟情怀一般都等同于梦想,能够坚持下来非常不容易.那么对情怀的坚持,就置企业的生死于不顾,到底值不值得呢? 情怀的高傲 梦想的拖延 7月

表达式左值右值

左值右值是表达式的属性,该属性称为 value category.按该属性分类,每一个表达式属于下列之一: lvalue left value,传统意义上的左值 xvalue expiring value, x值,指通过“右值引用”产生的对象 prvalue pure rvalue,纯右值,传统意义上的右值(?) 而 xvalue 和其他两个类型分别复合,构成: lvalue + xvalue = glvalue general lvalue,泛左值 xvalue + prvalue = rva

C、C++差异之左值右值

C与C++在语法细节上还是有一些差异的,虽然一般情况下可能这些差异不足以造成结果的区别,但有些代码确实会有影响. 这次,主要总结下左值右值的差异. 在C中,很多左值运算符的结果都不再是左值,然而在C++中,只要逻辑上可行,左值运算符的结果仍然是左值.C++的这种方式,让运算符表达式之间的灵活性更大. 1.++i, 我们都习惯了在C++中,i 自加后返回自己:然而在C中i自加后,返回的是个临时的副本,即和i++是一样的,此结果不能作为左值,即(++i)=0非法.所以我想这就是为什么代码 中还是很多