1、Swift与OC的区别
// 在Swift当中没有main函数的概念;没有.m和.h文件,一个类就是一个.swift文件
// 在swift当中可以不写分号,但是如果当一行当中有多条语句的时候就必须写分号
// 在swift当中采用print函数来代替NSLog函数进行打印数据,print函数的效率要比NSLog高,而且在print函数中没有占位符的概念,直接使用"\( )"来进行参数的插入
2、Swift中的变量和常量
// 在swift中分别用 var 和 let 来表示变量和常量
// 格式 : let / var 名字: 数据类型 = 初始值
// 在swift中也可以不用明确的指出变量和常量的类型 xCode会根据你所提供的初值自行推导出具体类型
注:常量一经赋值之后就不允许改变;在swift中进行运算是需要把参与运算的量强转成同一类型,不同数据类型不能做运算,如:
var a = 10
var b = 10.2
var c = a + Int(b)
3、swift中常用的数据类型
整型:Int 浮点型:Double 布尔型:BOOL(swift中的BOOL值为true(真)和false(假))
字符型:character 字符串型:string(在swift中采用string表示一个字符串,在双引号中赋值)
4、swift中的字符串
var str = "hello"
var str1 = "world"
//长度:str.characters.count
//字符串的拼接采用 += (拼接字符使用append函数):str += str1 (打印结果为:helloworld)
//判断是否相等采用 == :str == "hello"
//字符串前缀和后缀:str.hasPrefix(前缀) str.hasSuffix(后缀)
// 大小写转换: str.uppercaseString(大写) str.lowercaseString(小写)
// 字符串string支持遍历:for item in str.characters
注:swift里面的字符串可以和OC里面的字符串进行相互转换:let str2 = str1 as NSString
5、swift中的数组
在swift中数组类型是Array,创建数组(字典)时必须明确指出数组里面元素的类型
var array:[string] = ["1","2","3"]
//添加元素:array.append("4")
//删除的方法
array.removeAll()
array.removeAll(keepCapacity:Bool)
array.removeAtIndex(index: Int)
array.removeFirst()
array.removeFirst(n: Int)
array.removeLast()
array.removeRange(subRange: Range)
注:
array.removeAll()删除数组并清除所占空间
array.removeAll(keepCapacity:Bool)删除数组,根据Bool的给的值来进行判断是否清除所占空间
//遍历
for item in array (普通遍历)
for (index, value) in array.enumerate()(元祖遍历)
6、swift中的字典
var dict:[String:AnyObjrct] = ["1":"a","2":"b"]
// 增加元素和更新字典
dict["3"] = "c" 如果key值存在就是一个更新的操作,如果key值不存在就是一个增加的操作
//删除
dict0.removeAtIndex(dict.indexForKey("2")!)
dict0.removeValueForKey("1")
//合并两个字典
for item in dict.keys {
dict1[item] = dict[item]
}
// 元祖遍历
for (key,value) in dict.enumerate()
7、swift中的枚举
swift中一个枚举成员不局限于关联整型数据,也没有默认值。如果枚举关联的是一个整型数据的话,系统会对枚举值根据前面的值进行累加;如果枚举关联的是基本类型中非整型数据类型的话,就必须给出所有的枚举关联值。如果一个枚举类型已经确定的话,下次赋值的时候可以通过 . 语法再次进行赋值
enum Month:String{
// 两种赋值方式
第一种// case January, February, Match
第二种// case January = "a"
case February = "b"
case Match = "c"
}
var month = Month.January
month = .Match
print("month = \(month)")
print(month.rawValue)//打印枚举对应的值
8、swift中的可选类型
// 可选类型
// 概念:如果一个值可能有值,也可能为nil,那么这个变量/常量就是一个可选类型,可选类型用 ?标识出来
// 如果打印数据被Optional字样包含的话说明打印了一个可选类型
// 可选类型不能直接参与运算,参与运算之前必须强制解包,强制解包用!标示
注:在对一个可选类型进行强制解包之前必须确认这个可选值不为nil。
在模型里面所有的基本数据类型不可以为可选类型,否则的话在字典转模型的话找不到这个key,给默认值0
var a1:Int? = 21
print(a1)
let b1 = 10
let c = a1! + b1
print(c)
9、swift中的控制流
// 控制流
注:if后面的小括号可以省略,大括号不能省略。
swift中if后面的条件语句没有“非0即真”的概念
/*
let a = 10
if (a > 0) {
print("a > 0")
}
*/
// 可选类型的判断 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() //调用函数
// ? ! ??-> 空运算标识符
// ??-->如果可选类型有值的话,会帮我们进行强制解包之后参与运算,如果为nil的话则提供一个默认值给我们
/*
var value:Int?
let value1 = (value ?? 5) + 20
print("value1 = \(value1)")
*/
// switch
// switch 后面的小括号可以省略
// case 后面的break可以不写,不会造成穿透的效果
// 默认default必须添加,而且只能添加在最后面
// case后面至少有一条执行语句,case后面的大括号可以省略不写
// switch 不再像OC那样只局限于整型的选择
/*
let score = "优"
switch score
{
case "优":
print("a = 2")
case "良" :
print("a = 3")
default:
print("a = 4")
}
let a = 10
switch a {
case 2:
print("a = 2")
case 3:
print("a = 3")
case 10:
print("a = 10")
default:
print("a = nil")
}
*/
10、swift中的循环
// 循环
/*
* for循环
*/
// for 后面的小括号不能写,大括号必须加上
/*
for i in 0...10 {//[0,10]
print(i)
}
*/
/*
for i in 0..<10 {//[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
*/
网友评论