swift基本语法
1.常量和变量 定义一个常量:let 常量初始化赋值后 不能再次赋值 定义一个变量:var 赋值后 可以在此修改 后面一定要修改 否则选择let 2.Swift有数据类型推导 根据后面的值直接推出来的类型(option加鼠标左键4) 3.显示指定类型 let c:Double = 20.5 4.在swift中没有隐式类型转换 类型不同 不能参与运算 5.let&var 选择 建议先使用let 在哪需要修改时 再改成var 6.optional可选类型定义的常量或者变量可能有值 可能没有值(空,nil) (1)定义的常量或者变量不能 直接参与计算 格式:可选类型- 类型后面加上 “ ?” eg:var a:Int ? 定义的可选类型的变量默认值是nil (2)‘ Optional ’表明 定义的变量或者常量是一个可选类型 ‘ unwrapped ’ 表明可选类型没有进行解包 (3)let result = a !+ b ‘ !’ 对可选类型的变量或者常量进行强制解包(告诉系统这个值一定存在 你去用吧 ) 如果这个值不存在(unexpectedly found nil while unwrapping an Optional value 对一个可选值为nil 强制解包 崩溃) 在swift里面操作符空格要匹配 (4)??运算符 let result = (a ?? 0)+ b 使用 空合并运算符 ‘ ?? ‘ 判断前面的可选类型的变量或者常量是否有值 如果有值 直接使用 a参与计算 如果a为nil 使用??后面的值参与计算 7.if控制流 (1)if num > 5{ } ‘ ()’ 可以省略 在swift 里面 只有一行代码 也不能省略‘ {}’ 在swift里面 没有‘ 非0即真‘的概念 条件语句的值 只能有true / false 需要一个bool类型的值 (2) 可选类型的判断 -unexpectedly found nil while unwrapping an Optional value -对一个可选类型的值为nil 强制解包 报错 (3)if let 判断 它的意思是 判断可选类型的变量或者常量(URL)是否有值 有值 就使用前面定义的常量或者变量去记录这个值 如果这个可选类型的变量或者常量为nil 就不执行 if let语句 if let u = url{ //再次就可以使用u 而且这个u是一定存在的 let request = NSURLRequest(URL:u) (4)多个可选类型的判断 let name:String ?=“张三” let age : Int ? = 20 //也可以使用var进行判断 if let n = name,(var)a = age { print() } (5)guard let判断 与if let相反的语法 //在循环里面可以使用break continue,不在循环里面使用return //guard let 判断可选类型的常量或者变量是否有值 如果有值 则赋值给定义的常量或者变量 否则没有值 执行else语句里面的 guard let u = url else{ (6)可选类型条件的判断 if let …. where…. where子句没有智能提示,子句可以使用&& 8.switch判断 swift 可以判断任意类型 可以省略break 可以省略大括号 case后必须有可执行语句 OC 只能判断整型 9.for循环 for ,while, do while,for in 0..<3 意思是 区间-[0,3) 0…3 意思是闭区间 -[0,3] 10.字符串的定义 (1)定义:swift :string这个类型 是一个结构体它的量级轻 速度是比NSString要快 它可以跟NSString无缝转换 支持字符串的遍历 OC NSString 它是一个对象 不支持字符串的遍历 (2)字符串的拼接 使用“ + ”可以拼接字符串 (3)‘ ()’ 可以拼接字符串 可以不用强制类型转换 (4)字符串长度 //统计字符串字符的个数 characters.count //统计字节数 一个汉字在UTF8编码格式下占用3个字节 (5)字符串的格式化 (6)字符串的截取 11.集合 (1)数组 定义数组:let 不可变数组 ;var 对应的可变数组 let array = [1,2,3,4] let array1 = [“张三”,“李四”] var array2:[string] = [string]() //添加元素 array2.append(“苹果”) //数组的遍历 for for value in array for (index,value) in array.enumerate //数组的合并 + 两数组直接相加 类型不匹配 不能直接合并 //数组删除 remove //数组的容量 capacity 容量是成倍扩展的 是2的倍数 (2)字典 字典的定义 [string :NSObject]这种字典类型是最常用 字典是无序的 数组是有序的 let定义的字典是不可变的 var 是可变的 //合并字典 不同类型的字典不能合并 //字典的删除remove 或者 dict[“age”]= nil //添加 如果key不存在就是添加操作 //修改 如果key存在就是修改操作 12.函数 (1)//无参数 无返回值 func demo1() //在swift2.0里面函数的第一个参数默认省略 //有两个参数 无返回值 func demo2(a:Int,b:Int) //有两个参数 无返回值的函数 num1 num2是外部参数 (是给调用方解释参数是什么意思 参数是干嘛的) func demo3(num1 a :Int,num2 b:Int){} //有参数有返回值的函数 func sum(a:Int,b:Int)->Int { return a + b } (2))函数格式 func 函数名(参数名:参数类型…)->返回值类型{} (3)没有返回值的三种类型 <1>func demo(num1 a:Int,num2 b:Int){} <2>func demo(num1 a:Int,num2 b:Int)->Void{} <3>func demo(num1 a:Int,num2 b:Int)->( ){} (4)swift中可以使用函数的嵌套 13.闭包 (1)和OC中的block是非常类似的 是一个预先定义好的代码块 可以作为函数的参数传递 也可以作为函数的返回值 在需要的时候调用‘ ( ) ’ 在使用self的时候需要注意循环引用 (2)闭包定义格式 闭包名 = { (参数名 :参数类型,…)->返回值类型 in 执行代码 } (3)没有返回值的闭包可以直接去掉‘ ->( ) ’ (4)定义一个没有参数 没有返回值的闭包可以直接去掉()->() ()->Void (5)???尾随闭包 //如果闭包作为函数的最后一个参数的话 则小括号‘()’ 在闭包前面(小括号‘ ()’提前关闭 ) //如果闭包没有参数和返回值 可以省略‘ ()->Void in’ 14.OC block循环引用 //加载网络数据的方法 //模拟耗时操作 获取网络数据 15.解决block循环引用 //使用__weak 解决block的循环引用 //对象销毁后 weakSelf指向的地址为nil __weak typeof(self)weakSelf = self; //使用__unsafe_unretained解决block的循环引用 //对象销毁后 weakSelf指向地址不变 地址对应对象已经销毁了 崩溃了报野指针 __unsafe_unretained typeof(self)weakSelf = self (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |