Swift学习笔记(结合代码,实践总结)

varstr ="Hello, playground"

//================Day41.元组=============

//1.1元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。

//声明一个元组

lethttpError = (404,"NotFound")

httpError.0

httpError.1

//1.2你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:

let(statusCode,statusMessage) =httpError

println("\(statusCode)")

println("\(statusMessage)")

//1.3如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:

let(justStatusCode,_) =httpError

println("\(justStatusCode)")

//1.4你可以在定义元组的时候给单个元素命名:

lethttp200Status = (statusCode:200,description:"OK")

http200Status.statusCode

http200Status.0

http200Status.description

http200Status.1

//备注:作为函数返回值时,元组非常有用。一个用来获取网页的函数可能会返回一个(Int, String)元组来描述是否获取成功。和只能返回一个类型的值比较起来,一个包含两个不同类型值的元组可以让函数的返回信息更有用。请参考函数参数与返回值。

//=======================2.可选类型=============

//2.1使用可选类型(optionals)来处理值可能缺失的情况,Swift的可选类型可以让你暗示任意类型的值缺失,并不需要一个特殊值。

//下面的例子使用toInt方法来尝试将一个String转换成Int

letpossibleNumber ="123"

letconvertedNumber =possibleNumber.toInt()

//convertedNumber被推测为类型"Int?",或者类型"optional Int"

//因为toInt方法可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。

//====================3.if语句以及强制解析===============

//3.1当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping):

lettestNumber:Int?

ifconvertedNumber!=nil{//一个可选常量或者变量但是没有赋值,它们会自动被设置为nil:

println("\(possibleNumber) has an integer value of\(convertedNumber!)")

}

//====================4.可选绑定========================

//使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量

letsomeOptional:String? ="123"

ifletconstantName =someOptional{

println(constantName)

}

//=====nil====

//你可以给可选变量赋值为nil来表示它没有值:

varserverResponseCode:Int? =404

// serverResponseCode包含一个可选的Int值404

serverResponseCode=nil

// serverResponseCode现在不包含值

//注意:

//nil不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。

varnumber:Int? =nil

number

//================4.隐式解析可选类型=============

//可选类型暗示了常量或者变量可以“没有值”。可选可以通过if语句来判断是否有值,如果有值的话可以通过可选绑定来解析值。

//有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。

//

//这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。

//

//当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在Swift中类的构造过程中

//一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。

letpossibleString:String? ="An optional string."

println(possibleString!)//需要惊叹号来获取值

//输出"An optional string."

letassumedString:String! ="An implicitly unwrapped optional string."

println(assumedString)//不需要感叹号

//输出"An implicitly unwrapped optional string."

//注意:

//如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选类型后面加一个惊叹号一样。

//===============5.断言=============

//怎么觉得像java里面的抛异常、、、

//可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能没办法继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因。

//

//使用断言进行调试

//

//断言会在运行时判断一个逻辑条件是否为true。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为true,代码运行会继续进行;如果条件判断为false,代码运行停止,你的应用被终止。

//

//如果你的代码在调试环境下触发了一个断言,比如你在Xcode中构建并运行一个应用,你可以清楚地看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。此外,断言允许你附加一条调试信息。

//

//你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:

letage = -3

assert(age>=0,"A person's age cannot be less than zero")

//因为age < 0,所以断言会触发

//在这个例子中,只有age >= 0为true的时候,即age的值非负的时候,代码运行才会继续。如果age的值是负数,就像代码中那样,age >= 0为false,断言被触发,结束应用。

//

//断言信息如果不需要,可以被省略,就像这样:

assert(age>=0)

//何时使用断言

//

//当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:

//

//整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引值可能太小或者太大。

//需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。

//一个可选值现在是nil,但是后面的代码运行需要一个非nil值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    XLsn0w阅读 873评论 2 1
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 1,190评论 0 7
  • 基本数据类型 整数整数就是没有小数部分的数字,如 42 和 -23 。整数是有符号的(正、负、零)或无符号的(正、...
    Gary_Tseng阅读 445评论 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,673评论 1 10
  • 晚上心情实在不怎么好,就和奶奶来到广场恢复心情。广场好不热闹,我们这边有个塔,今晚的塔灯全开,心情也开阔起来。 广...
    故人烟火阅读 303评论 3 4