1,注意点
- 编写代码的时候,一定要养成良好的编程习惯,该有空格的时候一定要有,不该有空格的时候一定不要有(不然可能会报错)
2,基础类型转字符串
|
|
3,字典
①初始化方法
12//初始化字典var ageDict = [String:Any]()②错误1,字典中既有字符串,又有整型。
1234567891011//错误示例var occupations = ["Malcolm" : "Captain","age": 12]//这里也不能用@12---✅ 解决方式1,结尾添加as [String : Any]var occupations = ["name" : "Mr.han","age" : 12] as [String : Any]
4,数组
①数组初始化方法
1234567//初始化数组(可以添加任意类型)var shoppingList = [Any]()//初始化一个Int类型的数组var array2:[Int] = [Int]()//这种应该不会有人用吧var array1:[Int] = [Any]() as! [Int]②数组和元组的区别
1234567//区别一1,数组[1,2,3,4,5]2,元组(1,2,3,4,5)//区别二(取值)数组array[0]元组array.0
5,控制流
|
|
① for in
12345678910111213141516171819202122/*1,使用for-in 来遍历字典,需要两个变量来表示每个键值对。(kind和numbers)2,字典是一个无序的集合,所以他们的键和值一任意顺序迭代结束*/let intestingNumbers = ["counts1" : [1,2,3,4],"counts2" : [5,6,7,8],"counts3" : [9,10,11,12],]//从输出可以看出字典输出是无序的intestingNumbersfor (kind,numbers) in intestingNumbers {//只是单纯的输出kind和numbers,那么将展示最后一个键值对// kind// numbers// print(kind)// print(numbers)}② while和repeat-while
123456789101112131415161718192021222324252627/*1,while来重复执行一段代码知道不满足条件2,repeat-while至少执行一次(替代do-while)*/var n = 2while n<100 {n = n * 2}//print(n) //128repeat{n = n * 2}while n<100//print(n) //256/*在循环中使用..< 表示范围(左闭右开)... 表示范围(左闭右闭)*/var total = 0for i in 0...4 {total += i}total③ switch用法
1234567891011121314151617181920212223242526/*>1,switch支持任意类型的数据以及各种比较操作--不仅仅是整数以及测试相等>2,fallthrough:满足一个条件后,继续判断后面的条件时,在满足的条件后面添加fallthrough注意使用fallthrough,下面的case条件不能为下面这种形式,case let x where x.hasPrefix("red"):不然报错(error: 'fallthrough' cannot transfer control to a case label that declares variables)>3,如果满足了条件,不执行任何操作,不能什么都不写,会报错。可以添加“空语句”→1, break→2, () //旧版本为():*/let vegetable = "red pepper"switch vegetable {case "celery":print("hehe")case "red pepper":print("good")fallthrough //下一个case,不能使用下面的形式。// case let x where x.hasPrefix("red"):// print("This is")default:// print("sorry")() //空语句}
6,值缺失
① ?的用法(值缺失)
12345678910var optionalName:String? = "Mr.han"if optionalName != nil {optionalName //之前好像不能在这里调用optionalName,采用的是下面的方式调用。}if let pName = optionalName { //这里我们可以再声明一个变量来接收optionalNamepNameoptionalName}② ??的用法(如果值缺失,使用默认值代替)
123let nickName:String? = nillet fullName:String = "mrhan"let infomalGreeting = "Hi \(nickName ?? fullName)" //如果nickName缺失的话,那么fullName就会替代它
7,函数
|
|
示例1
12345func greet(name:String, day:String) -> String{return "Hello \(name), today is \(day)"}greet(name: "mrhan", day: "12.14")示例2
1234567891011121314151617181920212223242526/*②1, 使用元组来让一个函数返回多个值。取值时该元组的元素可以用名称或者数字来表示。注意:如果返回值写成[Int],return的时候,写成return [min,max,sum]2,由1可知,数组和元组的区别→1,括号 (中括号 和 括号)→2,取值(array[0] 和 array.0)*/func calculate(scores:[Int]) -> (min:Int, max:Int, sum:Int){var min = scores[0]var max = scores[0]var sum = 0scores[0]for score in scores{if min > score{min = score}else if max < score{max = score}sum += score}return (min,max,sum)}示例3
123456789101112/*③函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式,但是不能直接传数组。*/func sumOf(numbers:Int...) -> Int{var sum = 0for number in numbers {sum += number}return sum}sumOf(numbers: 1,2,3) //这里不能传数组示例4
123456789101112/*④函数可以嵌套,被嵌套的函数可以访问外侧函数的变量(比如重构一个太长或复杂的函数)*/func returnFifteen() -> Int{var y = 10func add(){y += 5}add()return y}returnFifteen()示例5
1234567891011121314151617/*⑤函数是第一等类型,这意味着函数可以作为另一个函数的返回值解析:((Int) -> Int)1,第一个(Int)表示的是addOne传入的参数,而且必须要加括号2,第二个Int表示addOne返回值Int结论:可以使用一个函数的参数和返回值表示一个函数*/func makeIncrementer() -> ((Int) -> Int){ //这里第一个Int必须带括号,func addOne(number:Int) -> Int{return 1 + number}return addOne}var increment = makeIncrementer()increment(7)示例6
1234567891011121314151617181920/*⑥函数也可以当做参数传入另一个函数,注意只传函数名,不需要传参数。体会下⑤中的结论:可以使用一个函数的参数和返回值表示一个函数*/func hasAnyMatches(list:[Int], condition:(Int) -> Bool) -> Bool{for item in list{if condition(item) {return true //只要有一个满足就为true}}return false}func lessThanTen(number:Int) -> Bool{return number < 10}var numbers = [20,19,7,12]hasAnyMatches(list: numbers, condition: lessThanTen)
8,闭包
- Swift闭包
Swift闭包
概念:闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。
Swift中的闭包与c和oc中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似。
全局函数和嵌套函数其实就是特殊的闭包
闭包的形式有:
1,全局函数:有名字但不能捕获任何值。
2,嵌套函数:有名字,也能捕获封闭函数内的值。
3,闭包表达式:无名闭包,使用轻量级语法,可以根据上下文环境捕获值。Swift中的闭包有很多优化的地方:
1,根据上下文推断参数和返回值的类型
2,从单行表达式闭包中隐式返回(也就是闭包体中只有一行代码,可以省略return)
3,可以使用简化参数名,如$0,$1(从0开始,表示第i个参数…)
4,提供了尾随闭包语法(Trailing closure syntax)- 语法:
- 1,以下定义了一个接收参数并返回指定类型的闭包语法:(闭包语法即闭包公式,所有闭包都套用公式。)
{
(parameters) -> return type in
statements
} - 2,以闭包形式接收两个参数并返回布尔值:
{
(Int, Int) -> Bool in
Statement1
…
}
- 1,以下定义了一个接收参数并返回指定类型的闭包语法:(闭包语法即闭包公式,所有闭包都套用公式。)
|
|
|
|
|
|