swift简单学习之逻辑运算符

来源:互联网 发布:淘宝发布宝贝不同价格 编辑:程序博客网 时间:2024/06/15 17:11

下面是swift语言中于OC 不一样的地方

三元条件运算符

三元条件运算符是一种特殊的运算符,有三个部分,其形式为question? answer1:answer2.这是一个用来测试两种表达式基于输入是真或是 假的快捷方式。如果question? 为真时, 它评估answer1并返回其值; 否则,它评估answer2并返回其值。三元条件运算符是下面的代码的简化:

if question {answer1} else {answer2}

这里举一个列子,计算一个表行像素的高度,如果行有一个头,行高应该是50像素,比内容要高度要高。如果行没有头是20像素:

let contentHeight = 40let hasHeader = truelet rowHeight = contentHeight + (hasHeader ? 50 : 20)// rowHeight is equal to 90

前面的例子也可以用下面的的代码:

let contentHeight = 40let hasHeader = truevar rowHeight = contentHeightif hasHeader {rowHeight = rowHeight + 50} else {rowHeight = rowHeight + 20}// rowHeight is equal to 90

第一个例子使用的三元条件运算符,意味着rowHeight可以在一行代码被设置为正确的值。这比第二个示例更简洁, 不需要课外的rowHeight变量, 因为它的价值不需要在一个if语句中修改。

三元条件运算符提供了一个高效的写法来决定哪个表达式会被执行。不过还是请小心使用三元条件运算符,其简洁性如果过度使用会导致阅读代码的困难。要避免多个实例的三元条件运算符组合成一个复合语句。

范围运算符

Swift包含两个范围运算符,能快捷的表达一系列的值

封闭范围运算符

封闭范围运算符(a…b)定义了一个范围,从a到b,并包括a和b的值。

当要在一个范围内迭代所有可能的值的时候,范围运算符是非常有用的, 例如for-in循环

for index in 1...5 {println("\(index) times 5 is \(index * 5)")}// 1 times 5 is 5// 2 times 5 is 10// 3 times 5 is 15// 4 times 5 is 20// 5 times 5 is 25

欲了解更多for-in循环,请参阅控制流。

半封闭的区域运算符

半封闭的区域运算符(a..b)定义了从a到b的范围,但不包括b。它被认为是半封闭的,因为它包含第一个值,而不包含最终值。

半封闭的范围使用明确,当你使用从零开始的列表,如数组,它是有用的数到(但不包括)列表的长度:

let names = ["Anna", "Alex", "Brian", "Jack"]let count = names.countfor i in 0..count {println("Person \(i + 1) is called \(names[i])")}// Person 1 is called Anna// Person 2 is called Alex// Person 3 is called Brian// Person 4 is called Jack

请注意,该数组包含四个项目,但0 . .数只数到3(数组中的最后一个项目的索引),因为它是一个半封闭的范围。欲了解更多有关数组的信息,请参阅数组

逻辑运算符

逻辑运算符修改或结合布尔逻辑值true和false。Swift支持这三个标准逻辑运算符基于c语言:

  • Logical NOT (!a)
  • Logical AND (a && b)
  • Logical OR (a || b)

逻辑非运算符

逻辑非运算符(!a)转化一个Bollean值,true变成false,false变成true。

逻辑操作符是一个前缀操作符, 并立即出现在它修饰的值之前,没有任何空白,它被解读为”不是”, 见下面的例子:

let allowedEntry = falseif !allowedEntry {println("ACCESS DENIED")}// prints "ACCESS DENIED"

这句话if !allowedEntry 能理解为 “if not allowedEntry.” 只执行后续的行,如果“not allowedEntry” 是 true; 那就是说 if allowedEntry是false.

在这个例子中,精心挑选的布尔常量和变量名可以帮助保持代码的可读性和简洁,同时避免双重否定或混乱的逻辑语句。

逻辑与运算符

逻辑与运算符:(A && B)创建的表达式中,A和B两个值必须同时为true时表达式才正确。

其中A或者B有任一值是false时,逻辑与算符表示不成立,必须两者同时为true时才成立。事实上,如果第一个值是false,第二个值甚至不会再进行判断,因为必须是两个值皆为true,已经有一方false、则没必要再往下面进行判断了。这被称作短路条件。

以下这个例子判断两个Bool 类型的值,并只有这两个值都为真的时候会输出:Welcome。失败则输出”ACCESS DENIED”:

let enteredDoorCode = truelet passedRetinaScan = falseif enteredDoorCode && passedRetinaScan {    println("Welcome!")} else {    println("ACCESS DENIED")}// prints "ACCESS DENIED”

逻辑或运算符

表达式(a || b)运算符中、只要a或者b有一个为true,表达式就成立。

与上面的逻辑与运算符相似,逻辑或运算符使用短路条件判断,如果左边是 true,那么右边不会被判断,因为整体结果不会改变了。

在下面的例子中,第一个布尔值(hasDoorKey)为false,但第二个值(knowsOverridePassword)为true。因为两者有一个值是true,整个表达式的计算结果也为true,正确输出:Welcome!

let hasDoorKey = falselet knowsOverridePassword = trueif hasDoorKey || knowsOverridePassword {println("Welcome!")} else {println("ACCESS DENIED")}// prints "Welcome!"

复合逻辑表达式

你可以将多个逻辑运算符复合来创建更长的复合表达式:

if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {println("Welcome!")} else {println("ACCESS DENIED")}// prints "Welcome!"

相比于之前两个单独分开的运算符,本次通过多重嵌套、将我们上面的&&、|| 运算符相结合组合成一个较长的复合表达式。看起来有点饶人、其实本质还是两两相比较、可以简单地看成A && B || C || D、从左往右根据运算符优先级进行判断、注意区分开&&、||、只要牢记运算逻辑&&需要两者都为true、||则只需要一方为true则运算符正确即可解析整个复合表达式、透过现象看本质。

明确地括号(翻译成中文语句不连贯太特么饶人了、怒了自己理解。)

复合表达式中,我们可以添加进()使确逻辑意图更加明确,上面的例子中,我们可以在第一部分上加括号来使意义更明确。

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {println("Welcome!")} else {println("ACCESS DENIED")}// prints "Welcome!"

在复合逻辑表达式中、我们可以使用括号明确地表示我们需要将几个值放在一个单独的逻辑运算中去判断得出结果、最后根据()内的结果再去与后面的值进行判断、看上面的例子、就像我们小学学加减乘除一样、如果没有括号()我们肯定是按照运算符的优先级去判断、但此时有了括号、我们需要先运算其中的逻辑运算符得到它们的值.使用括号()在符合逻辑表达式中可以更明确的你的意图。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 主机电脑耳机插孔坏了怎么办 苹果6plus有点卡怎么办 手机拨通电话后黑屏怎么办 手机拨通后没声音怎么办 苹果手机铃声不响了怎么办 婴儿喘气粗好像有痰怎么办 金毛呼吸声很大怎么办 回看福建导视该怎么办 楼上木地板走路声音都很响怎么办 班里团支不搭理我我该怎么办 客户买家具说贵怎么办 英雄联盟超出显示范围怎么办 脸上有斑点怎么办内条 脖子扭到了一动就疼怎么办 杭州限行在路上怎么办 在路上限行了怎么办 微信号不能进群怎么办 在微信约妹子被骗2000怎么办 qq号进不了热聊怎么办 网上买彩票中五百万怎么办 别人登我支付宝怎么办 医保刷卡刷到现金支付怎么办 微信诈骗立案后怎么办 奔跑吧诈骗填写了身份证怎么办 快手绑定的手机号丢了怎么办 球球大作战绑定手机号丢了怎么办 快手绑定手机号丢了怎么办 绑定银行卡的手机号丢了怎么办 爱奇艺绑定的手机号丢了怎么办 高铁票订错时间怎么办 微信音频视频打出没反应怎么办 海尔超低温保存箱低温报警怎么办 孕期吃了烧烤蔬菜怎么办 百姓动迁政府说话不算数怎么办 孕妇用了青草膏怎么办 药材不知道啥名怎么办 诛仙手游鸿蒙紫气不见了怎么办 紫叶兰叶干了怎么办 绿萝叶子中毒了怎么办? 怀孕初期胃疼的厉害怎么办 怀孕胃疼的厉害怎么办