1 . swift简介
1.1 在swift当中没有main函数的概念。swift没有 .h 和 .m 文件,一个类只用.swift来表示。
在swift当中可以不写分号。但如果一行当中有多条语句的时候,分号就必须写。
在swift当中采用 print函数来代替NSLog函数打印数据,而且苹果建议我们这样,print函数效率比 NSLog要高.在print函数里面没有占位符的概念,如果要插入参数采用 \ ( )。
1.2 在swift当中变量和常量分别用var/let表示。
格式:let/var 名字 = 初始值。
在swift当中不用明确的指出变量和常量的类型,XCode会根据你的初值自行推导出具体类型 (Optional + Click )
2 swift中常用的数据类型
2.1 swift不存在隐式转换,不同数据类型不能做运算,做运算之前必须进行强制类型转换
格式:let/var名字:数据类型 = 初始值
//swift整型和双精度浮点型相加,就需要强转一下
let a1:Int = 2
var a2:Double = 2.32
let b = a1 + Int(a2)
print("b")
//bool布尔值只能用 true or false
let a3:Bool = true
print("a3 = \(a3)"))
//字符类型采用character 并且双引号赋值
let a4:Character = "a"
//在swift中采用String 表示一个字符串,双引号赋值,不是一个对象,是一个结构体
var a5:String = "海贼-女帝"
// swift ??->空运算标示符
?? -->如果可选类型值不为空的话,会帮我们进行强制解包之后参与运算,如果为nil的话则提供一个默认值给我们
var value:Int?
let value1 = (value ?? 5) + 20
print("value1 = \(value1)")
2.2 字符串
var str = "hello"
1.长度
print("长度 = \(str.characters.count)")
2.拼接字符串采用+= 拼接字符append函数
var str1 = "world"
str += str1
print("str = \(str)")
let c:Character = "c"
str.append(c)
print("str = \(str)")
//是否相等 ==
if(str1 == "world"){
print("相等")
}
//前缀相等
if(str1.hasPrefix("wo")){
print("前缀是wo")
}
//后缀
if(str1.hasSuffix("ld")) {
print("后缀是ld")
}
//大小写转换
print("str1的大写\(str1.uppercaseString)")
let str2 = "2331THJF"
print("str1的大写\(str2.lowercaseString)")
//字符串String 支持遍历
for item in str.characters{
print(item)
}
//swift里面的字符串跟OC字符串可以互相转换
let str4 = str1 as NSString
2.3 数组
在swift中数组类型是Array,创建一个数组或者字典必须明确的指出数组里面元素类型
跟OC里面NSArray可以互相转换
var array1:[String] = ["123","456","356"]
//增加元素
array1.append("888")
print(array1)
//删除
array1.removeAll(keepCapacity: true)
//遍历分两种:普通遍历和云组遍历
//普通遍历
for item in array1{
print(item)
}
//云组遍历 //enumerate(array)Xcode 2.2之前的写法
for(index, value)in array1.enumerate() {
print("index = \(index),value = \(value))")
}
//数组个数 :array1.count
2.4 字典
var dict0:[String:AnyObject] = ["1":"a", "2":"v", "3":"c"]
var dict1:[String:AnyObject] = ["4":"a", "5":"v", "6":"c"]
//增加和更新元素
dict0["4"] = "r" //如何key 存在就是一个更新操作,如果不存在就是一个增加操作
print(dict0)
//移除元素
dict0.removeAtIndex(dict0.indexForKey("4")!)
dict0.removeValueForKey("1")
print(dict0)
//遍历
for item in dict0{
print(item)
}
for(index,value)in dict0.enumerate(){
print("index = \(index),value = \(value)")
}
//合并两个字典
for item in dict0.keys{
dict1[item] = dict0[item]
}
2.5 可选类型
概念:如果一个值可能有值,也可能为空,那么这个常量/变量就是一个可选类型.可选类型用?标示出来
如果打印数据被Optional字样包含的话说明打印了一个可选类型
可选类型不能直接参与运算,参与运算之前必须强制解包!标示
警告:在对一个可选类型进行强制解包之前必须确认这个可选类型不能为nil
错误类型error :unexpectedly found nil while unwrapping an Optional value 说明对nil 强制解包
在模型里面所有的基本数据类型不可以为可选类型,否则的话在字典转模型的话找不到这个key。给默认值0
2.6 枚举
swift 一个枚举成员不局限于关联整形数据,也没有默认值
如果枚举关联的是一个整形数据的话,后面的枚举值会根据前面进行累加
如果枚举关联的是一个非整形数据,必须给出所有的枚举关联值
如果一个枚举类型已经指定的话,下次赋值的时候可以通过(.)进行赋值,省略前面的
获取枚举成员关联的默认值 .rawValue
enum Month:String {
//两种赋值方式
//case January,February,Match
case January = "一月"
case February = "二月"
case Match = "三月"
}
var month = Month.January
print("month1 = \(month.rawValue)")
month = .Match
print("month1 = \(month.hashValue)")
2.7 控制流
1.if后面的小括号可以省略,大括号不能省略
2.swift中if后面的条件语句没有“非0即真”的概念
let a = 10
if(a > 0){
print("a > 0")
}
2.可选类型的判断 if - let
if - let:先判断可选类型是否为空,不为空创建一个局部变量接收此时可选类型的值,再执行代码块,否则不执行代码块
let a:Int? = 10
if let b = a{
print("b = \(b)")
}
if-let-where where是对定义出来的常量再做一层判断
if let c = a where c > 5{
print("a > 5")
}
guard 守护 是判断可选类型是否有值,没值的话执行else里面的代码块,有值的话不执行代码块,在下面执行
//定义一个函数
func demo(){
var a:Int? = 12
guard let d = a else {
print("a = nil")
return
}
print("d = \(d)")
}
//调用函数
demo()
2.8 switch
//switch
//switch 后面的小括号可以省略
//case 后面的break 可以不写,不会造成穿透的效果
//默认default必须添加,而且只能加在最后面
//case后面至少有一条执行语句,case后面的大括号可以省略不写
//switch不再像OC那样只局限于整形的选择
let a = 10
switch a
{
case 2:
print("a = 2")
case 3 :
print("a = 3")
case 10:
print("a = 10")
print("a = 10")
default :
print("a = nil")
}
//switch不再像OC一样只局限于整形、浮点型、字符串等
let score = "优"
switch score
{
case "优":
print("a = 2")
case "良":
print("a = 3")
case "差":
print("a = 10")
default :
print("a = o")
}
2.9 循环
//写法一
//for()在swift2.2后面就废弃了
for var i = 0;i < 10;i++
{
print(i)
}
//写法二(闭区间)
for i in 0...10 {
print(i)
}
//[0,10)开区间
for i in 0..<10
{
print(i)
}
//while
var i = 10
while i > 1
{
print(i)
i--
}
//do-while不存在,取代的是repeat-while
var i = 10
repeat{
print(i)
i--
}while i > 5