swift4.1 系统学习七
import Foundation
//swift学习笔记07
/*
控制流语句
学过任何一种语言的小伙伴们都对控制流语句不陌生,几乎每一天都在用。
控制流分类:
1.分支
2.循环
*/
/*
- do语句块
这个语句块在我之前的学习中一直在使用,是一种在学习中很方便的写代码的方式。
作用:
1》作为一个单独的作用域,声明的局部对象外部是无法访问的。
允许嵌套,如果内部的变量名字与外部相同,则会访问内部变量。
*/
do {
let a = 1, b = 2
do {
let a = 10
let b = 20
let c = 5
do {
let a = 30
let b = 40 + c
print("最里层: a = \(a), b = \(b), c = \(c)")
//a = 30, b = 45, c = 5
}
print("第二层: a = \(a), b = \(b), c = \(c)")
}
print("最外层: a = \(a), b = \(b)")
}
swift中如果不用do引出,而是单单用花括号{ },那么它默认表达的是一个闭包表达式,而不是一个语句块。
/*
2.if语句
注意:
1》swift中if语句中的条件表达式的圆括号可以省略
2》swift中if语句中的花括号不能省略,即使只有一条语句
*/
do {
let a = 0, b = 10
if a == 0 {
print("a = 0")
} else {
print("a != 0")
}
if a + b > 10 {
print("大于10")
} else if a + b == 10 {
print("等于10")
} else {
print("小于10")
}
/*
初学者要注意
if 表达式 {
} else if 表达式 {
}
与
if 表达式 {
}
if 表达式 {
}
这两者之间的不同
*/
}
/*
- 三目条件操作符
表达式 ? 语句1 :语句2
意思是: 如果表达式==true,执行语句1,否则执行语句2
是对if...else 语句的一种更加简单的表达
*/
do {
var a = 1, b = 2
a = a > 0 ? a + b : a - b
print("a = \(a)")
b = a > b ? a : b
print("b = \(b)")
}
注意: 三目运算符中的 ?一定要与表达式之间有空格,不然会被当做可选类型的?。最好三目运算符表达式之间都要加空格。
/*
- switch语句
条件选择多于等于三条的时候,就要考虑使用switch语句,使得逻辑更加的清晰。
switch 表达式 {
case 条件1:
case 条件2:
...
注意:
1》swift中,switch后面的表达式可以是void类型。
2》一般情况下switch语句块中,最后会跟一个default标签,以处理异常情况。但是,
当switch的case语句已经列举了所有类型之后,default就不需要了,如果加了不必要的default,
编辑器会报出警告。
3》swift语言中,switch后面的表达式可以是任何遵循了Equatable协议的类型的表达式,
甚至还可以是一个元类型。
但是case后面的表达式必须是表示值类型的表达式。
4》所有的case语句包括default语句都必须至少包含一条语句。
5》默认情况下,执行完一个case语句块之后直接跳出switch,而不需要显式添加break语句。
当我们在某些情况下想跳出当前的case语句的时候,可以使用break语句,跳出整个switch语句块。
switch 常常与 enum 一起使用
}
*/
do {
enum Type: String {
case iphone5 = "iphone5"
case iphone6 = "iphone6"
case iphone7 = "iphone7"
case iphone8 = "iphone8"
case iphoneX = "iphoneX"
}
var type: Type = .iphoneX
type = .iphone6
switch type {
case .iphone5:
print(type)
case .iphone6:
print(type)
case .iphone7:
print(type)
case .iphone8:
print(type)
case .iphoneX:
print(type)
}
}
do {
class Test: CustomStringConvertible {
var a = 0, b = 100
init(a: Int, b: Int) {
self.a = a
self.b = b
}
var description: String {
return "a = \(a), b = \(b)"
}
}
let t = Test.init(a: 5, b: 10)
let q = Test.init(a: 6, b: 88)
switch t {
case let obj:
print("obj = \(obj)")
print("value = \(obj.a + t.b)")
}
switch type(of: t) {
case let type:
print("type is :\(type)")
}
switch type(of: q) {
case let type:
print("type is :\(type)")
}
}
do {
struct MyObject: Equatable {
var a = 0
var b = 1
public static func == (lhs: MyObject, rhs: MyObject) -> Bool {
return (lhs.a == rhs.a && lhs.b == rhs.b)
}
}
let obj = MyObject(a: 3, b: 4)
let obj2 = MyObject(a: 3, b: 3)
switch obj {
case MyObject():
print("dummy object")
case obj2:
print("obj2")
case MyObject(a:3, b:4):
print("correct object")
default:
print("no match")
}
//打印出:correct object
}
/*
- case匹配模式
swift编程语言中的case匹配非常的丰富,除了上面已经介绍过的匹配方式,还有
1》复合case匹配,
2》区间匹配,
3》值绑定匹配形式
4》以及where从句引出的谓词逻辑匹配。
*/
//1>复合case匹配
/*
概念:一条case语句可以包含多个表达式,各个表达式之间用逗号分隔,这些表达式之间只要有一个能与
switch表达式匹配上,那就执行该case下的语句。
*/
do {
var a: Int8 = 10
switch a {
//复合case
case 0, 1, 2:
print("zero")
//case后面的表达式亦需要一定是常量和字面量,也可以是变量
case a + 1, a:
print("加1")
a = a + 1
print("a = \(a)")
default:
break
}
}
// case后面还可以跟一个范围表达式
do{
let score = 88
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("良好")
case 80..<99:
print("优")
case 100:
print("完美")
default:
break
}
}
// swift语言中case匹配还有一个强大的功能——值绑定
/*
一般情况下,我们可以直接在case后面直接跟let或者var声明一个局部对象,以捕获switch后面表达式的值。
该对象只能在当前的case中可见。不需要default标签。
*/
do {
let a = 8
switch a {
case 0, 1, 2..<5:
print("正产值")
case let v:
print("v = \(v)")
}
switch a {
case var v:
v += 1
print("v = \(v)")
case 100:
print("永远不会执行")
}
print("a = \(a)")
}
//基于值绑定基础上使用where从句
/*
where后面直接跟一个bool表达式,表示当该表达式为真的时候则匹配当前的case,
这么一来,只绑定也无法覆盖所有的case情况了,所以需要default处理。
*/
do {
let a = 8
switch a {
case let v where v > 0 && v < 3:
print("正常值")
case let v where v >= 3 && v <= 10:
print("\(v)在[3,10]之间")
default:
print("别的值")
}
}
// 6. case 匹配模式用于元组对象
do{
let tuple = (8, 9)
switch tuple {
case (0, 0):
print("0")
case (1, 2), (3, 4):
print("one")
case (5, 6), (7, 8):
print("two")
case (_, 8):
print("哈哈哈哈")
case (1...3, 5..<10), (_, 4...9):
print("区间")
default:
print("其他值")
}
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
程序员遇到哪些情况可以考虑辞职
一、首先你得已经成为公司里“最好”的程序员,或者你已经找不到可作为老师和导师的人 关于这一点,很多人都会过度自信,所以我们需要诚实地评估自己的技能。再则,即便你承认自己不是最好的,那么你去请教的“前辈”又是否乐意将他们的知识分享给你?是的,即使你所在的公司聘用的都是身怀绝技的牛人,但是如果这些人各忙各的,都不鸟你一下,那么这和独自工作又有什么区别? 二、如果使用的技术是非可持续发展的,那么你终将会被市场淘汰 要是你依然冥顽不灵地执着于扩展这些过时的、专有的或者非常特殊的技术,那么你这是在自掘坟墓。要是有哪家企业仍然在用某种语言或框架的早期版本,那或许恰好能拯救你。但是,你得明白,长时间地处在一个停滞不前的技术环境里,可比就职于同一家公司不断给他们改进工具要来得糟糕多了。 三、企业文化与个人理念格格不入 如果你发现公司的企业文化同你的价值观相互抵触的时候,你很可能会被老板或主管看成“异类”分子。你想,你的老板和主管会去提升一个异类吗?而且,由于你和公司两者之间缺少价值观的一致性,这会导致你无法以良好的态度去工作,这对你对公司都不是件好事。 四、你觉得自己会有远大的前程吗? 也就是说,你觉...
-
下一篇
手机记事本软件敬业签如何添加定时提醒
敬业签是一款免费的跨平台多端云同步,集备忘、记录、提醒等功能于一体的电脑桌面记事本软件和手机桌面记事本软件。支持Android、IOS、Windows系统、iPad和web网页版,苹果Mac端可先使用web网页版。 它的提醒功能有定时提醒、按天/周/月/季/年重复提醒、农历提醒等。不管是日常生活还是忙碌工作,做起事情来就容易忘事,所以提醒功能必不可少。 今天小编就来给大家介绍一下手机记事本软件敬业签如何添加定时提醒。 1.打开并登录手机版敬业签,左划需要添加定时提醒的内容。 点击“更多”进入修改界面。(直接点击要填加提醒的内容也可以进入修改界面) 3.点击打开“指定时间提醒我”。 4.修改好提醒时间,点击下面的“确定”或者右上角的“保存”即可。 学会了吗?现在就来试试在手机版敬业签上添加定时提醒吧。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 面试大杂烩
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程