swift4.0已经出现,为了巩固以前的知识,先上一版基础版本
下文是根据swift3.0的一本书挑拣后总结的,所有的代码都会以swift4.0为基础来做调试,避免有错误的地方
1、let常量、var变量
在swift中,不需要像OC或者很多语言一样,定义常量或者变量的类型,又不想JS一样,可以随时更改数据的类型.swfit在定义变量名的时候,会经过系统的推导,来获得这个变量的正确数据类型,我们也可以手工来制定这个类型,例如 let a:Double = 0,如果不指定,数字0默认是Int类型
常量:let pi = 3.1415926,这个pi常量是不允许修改的,如果后边有赋值pi = 3,则会在编译状态下报错 Cannot assign to value: 'pi' is a 'let' constant,不能赋值,pi是用let修饰的一个常数
变量:var a = 1 ; print(a) ; a = 2; print(a),打印分别是 1 2.在这里说明一下,swift中,代码如果分行写,是不需要加入任何的标点符号的,如果放到同一行,需要加入“;”来代表语句的分割
我们如果用 var pi = 3.14并且在后续代码中,都没有对pi的修改,系统不会报错,只会报一个⚠️;Variable 'a' was never mutated; consider changing to 'let' constant;变量a并没有发生过数值的更改,用let来修饰.所以我们在编写代码的过程中,不发生改变的变量都改成常量.让机器能更快的识别
2、类型元组
a、布尔型 Bool ,在swift中,Bool只有两个值 true 和 flase
b、整型,这个类型比较多Int8、Int16、Int32、Int64、Int、UInt8、UInt16、UInt32、UInt64、UInt,在众多的整型中,我们一般使用Int,而UInt为无符号整型用的比较少,其余的如果没有要求固定宽的整型,我们一般不使用.
接下来我们用不同的进制来把10赋值给常量
let a = 10(10进制);let b = 0b1010(2进制);let c = 0o12(8进制);let d = 0xA(16进制)
c、浮点型float(浮点型),Double(双精度浮点型) let pi = 3.1415926,系统会默认把未指定类型的浮点型认为是Double.
d、字符串类型 var a=""(空字符串),三个双引号,可以换行使用,之间的所有内容都是字符串内容.判断字符串是否为空,if a.isEmpty {}
e、数据转换 1、小范围到大范围转换是安全的 2、大范围到小范围转换是不安全的 3、布尔型和整形转换,非0即真,真为1
f、元组 就相当于用一个变量代表多个变量 var x = (1,2,3) ;(a,b,c) = x,相当于 a = 1 , b =2 ,c = 3,方便数据的传递
g、可选类型 类型后边加?代表可选,可以设置为nil
h、拆包 var str : String = nil ;if str == nil {print("数据为空")}else {print(str!)};print(str ?? "数据为空")
3、运算符
运算符和其他语言大多相同,我们来列举一下
a、算数运算符 + - * / %
b、赋值运算符 = += -= *= /= %=
c、关系运算符 == != > < >= <=
d、逻辑运算符 ! && ||
e、三元运算符 ? :
4、循环语句(控制转移语句)
a、for-in循环:for index in 1..<5 {print(index)}
b、while语句 var i = 0; while i<10 {print(i);i++)
c、repeat while var i = 0; repeat {print(i);I++} while I < 10
d、continue 可以携带标签,指定跳转出哪个循环. labelA: for index in 1...4{for item in 2...3 {if intel == index {continue labelA}}}
e、break
f、fallthrough
5、分支语句
a、if if true {print(“true”)}
b、if else if a == “a” {print(“a”)}else {print(“not a”)}
c、else if if a=="a"{print("a")}else if a=="b"{print("b")} else {print("not a and not b")}
d、switch switch x {case 1: print("1") case 2,3,4 where x ==y : print("2 or 3 or 4");default :break}
6、字符和字符串
a、转义字符 \0 \\ \t \n \r \" \'
b、常见操作
1、字符串度 "hello".count
2、前后缀判断 "hello".hasPrefix("he") "hello".hasSuffix("lo")
3、大小写转换 "Hello".uppercased() "Hello".lowercased() "hello".capitalized 首字母大写
4、添加 var str = "hello" str.insert("w",at: str.index(after:str.startindex))
删除 var str = "hello"; let range = str.index(str.endIndex,offsetBy:-6)..
5、字符串提取 str.substring(from:Index)从开始index str.substring(to:Index) 到index结束 str.substring(with: Range
)提取某个范围 字符串替换 str.replaceSubrange(range, with: "hello") 6、遍历字符串 var str = "swift" for c in str.characters {print(c)}
7、Collection类型(数组、字典、集合)
a、数组 var arr : [String] = ["swift","oc","java","C"]
b、字典 var dict: [String : Any] = ["name":"swift","name":"OC","name":"java"]
数字和字典的操作基本相同
操作:追加、插入、删除、替换
泛型:数据和字典本身就是泛型 例如
Array
相当于 [String] Dictionary
相当于[String:Any] var dict=["key1":"value1","key2":"value2"]
for key in dict.keys {
print(key)
}
for value in dict.values {
print(value)
}
for (key,value) in dict {
print(key,value)
}
集合:是否包含某个元素 setStr : Set = ["a","b","c","d"]
if setStr.contains("a") {}
let aSet : Set = [1,3,5,6]
let bSet : Set = [2,4,5,6]
print("并集\(aSet.union(bSet).sorted())")
print("交集\(aSet.intersection(bSet).sorted())")
print("前有后无\(aSet.subtracting(bSet).sorted())")
print("差集\(aSet.union(bSet).subtracting(aSet.intersection(bSet)).sorted())")
8、函数闭包
函数声明
func 函数名(参数列表) -> 返回值类型{
函数体
return 返回值
}
inout 可以在函数内部更改外部的值
func swap(num1: inout Int, num2 : inout Int){}
9、枚举
10、结构体
11、类
12、协议与抽象类型
13、单元测试(看时间是否详细写)