首页 文章 精选 留言 我的

精选列表

搜索[系统],共10000篇文章
优秀的个人博客,低调大师

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("其他值") } }

优秀的个人博客,低调大师

swift4.1 系统学习八

// // main.swift // swift08 // // Created by iOS on 2018/9/28. // Copyright © 2018年 weiman. All rights reserved. // import Foundation //swift学习笔记8 /* 1. for-in 循环 swift中使用for-in循环还是很频繁的。在swift中,没有OC中的for(,,){}循环了,遍历数组、字典、 区间、字符串等都是使用for-in循环。 */ do { // 1.遍历数组 let names = ["小明", "Ann", "小蓝", "张三"] for name in names { print("Hello, \(name)") } //2.遍历字典 let numbersOfLegs = ["蜘蛛": 8, "螃蟹": 8, "猫咪": 4, "蚂蚁": 6] for (name, legs) in numbersOfLegs { print("\(name) have \(legs) legs") } //3.遍历范围 for index in 1...5 { print("\(index) * 5 = \(index * 5)") } /* 注意: 上面例子中的循环变量是不需要显式声明的,它是一个每次循环开始时被自动赋值的常量。 如果不需要它,可以使用 _ 代替。 */ } // 2. while循环 /* swift中的while循环与C语言类似,语法为: while 表达式 { ... } 注意: 1.这里的表达式可以省略小括号 2.花括号不能省略,哪怕只有一条语句 */ do { // 计算1到10000的求和 var sum = 0 var num = 1 while num <= 10000 { sum += num num += 1 } print("sum = \(sum), num = \(num)") //计算10的阶乘 num = 10 var f = 1 while num > 1 { f = f * num num -= 1 } print("f = \(f)") } /* break语句:跳出当前循环体; continue语句: 跳过当前这一次的循环,继续下一次循环。 */ do { var i = 3 while i > 0 { var j = 4 while j > 0 { print("i = \(i), j = \(j)") j -= 1 if i + j < 3 { break } } i -= 1 if i == 2 { continue } print("外层 i = \(i)") } /* i = 3, j = 4 i = 3, j = 3 i = 3, j = 2 i = 3, j = 1 i = 2, j = 4 i = 2, j = 3 i = 2, j = 2 i = 2, j = 1 外层 i = 1 i = 1, j = 4 i = 1, j = 3 i = 1, j = 2 外层 i = 0 */ } //3. repeat-while循环 /* 语法: repeat { ... } while 表达式 执行逻辑: 先执行repeat语句块中的语句,然后判断表达式是否为真,如果为真就继续执行repeat语句块 的语句,如果为假,就停止循环,继续执行while下面的语句。 */ do { // 计算1到10的和 var sum = 0 var num = 10 repeat { sum += num num -= 1 } while num > 0 print("sum = \(sum), num = \(num)") // 10的阶乘 var jc = 1 var n = 10 repeat { jc *= n n -= 1 print("n = \(n), jc = \(jc)") } while n > 0 print("10! = \(jc)") } // 4. 标签语句 /* 标签语句是做什么的? 可以方便地跳出指定的do语句块、if语句块、switch语句块、for-in语句块、 while语句块或者repeat语句块。 如何跳出? 当我们需要跳出指定的语句块的时候,我们可以在语句块之前加上标签,然后通过 break label 语句跳出。 在循环体中,标签也可以与continue一起使用跳过某个指定循环的当前迭代,直接执行下一次迭代。 */ do { var a = 100 label: do { label2: if a > 50 { break label } else { label3:if a < 50 { break label3 } else { break label2 } } break label } } /* 个人建议: 标签语句会破坏代码的可读性,建议尽量少的使用,不然时间一长,自己都不知道这块为什么要这样跳来跳去的 */

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册