1、在Swift中如需导入头文件,只需要import即可,不需要”“或<>
如:import UIKit
2、在Swift中自定义的文件都不需要导入头文件,可以直接使用
3、在Swift中代码可以不写分号”;”
如:var str = "Hello,World"
进入正题了
一、常量与变量
定义变量的实质就是开辟内存空间
例如:int a = 12
其实就是在栈区和常量区都开辟了内存空间,栈区指针a指向常量区的12
1、let和var
let表示是一个常量,相当于OC中用const修饰
如:let a = 1
var表示变量
如:var b = 1
2、因为Swift中数据类型可以自动推断,是根据等号右边的值判断是什么类型数据然后复制给等号左边的变量(常量),因此,在运算符两边格式要相同,如有空格则都要空格,如若没有,则两边都没有
如:var c = 3,var c=3
3、我们也可以在定义的时候就指定数据类型
格式:var/let 变量名:数据类型 = 初值
如:var d:Int = 4
4、因为C和OC中都是使用ASCII编码方式,所以命名规则为:由数字、字母、下划线组成,其中不能以数字开头,可以使用$
但是在Swift中使用Unicode编码方式,所以几乎所有字符都可以当做变量名
如:var 呵呵 = "��" , var �� = "笑了"
二、数据类型
浮点:var float:Float = 4.3
整型:var int:Int = 2
1、强制类型转换:想要转换的类型()
如:var sum:Int = int + Int(float)
2、创建一个字符型变量
如:var char:Character = "A"
3、布尔类型
如:var bool:Bool = true //Swift中用true 或 false
三、字符串
1、创建空字符串
var str_empty = ""
或 var str_empty = String() //构造函数相当于OC初始化方法
2、Swift中使用点语法来调用方法,还有if语句的()不用写也可以
if str_empty.isEmpty {
print("str_empty是空字符串")
}
3、字符串的拼接,直接用”+”即可
var str1 = "你真"
var str2 = "可爱"
var str3 = str1 + str2
4、计算字符串的长度
print(str3.characters.count)
5、字符串的插值
//Swift没有格式化输出符,所有需要原样输出的都是用”\()”,在()内写上需要输出的内容
print("a=\(a)")
6、大小写的转换
let str4 = "Hello World"
str4.uppercaseString
str4.lowercaseString
四、数组
C:数组只能存放同一种类型的数据
OC:数组里面只能存放对象,但可以是不同类的对象
Swift:只能存放同一种类型的数据(当指明数组类型的时候)
1、Swift中数组可用[]形式表示,也可以用Array()初始化
//不指明数据类型的时候可以不是同一种类型
var array = [1,2,3]
var array1 = [1,2.2,3]
var array2 = [1,"呵呵",3]
//指明数据类型的时候只能是同一种数据
var array3:Array<Int> = [1,2,3]
//还是通过下标取元素
print(array[0])
不可变数组并不仅仅是数组本身的长度不能改变,数组里面的元素也不能改变
例如:let array4:Array<Int> = [1,2,3,4]
array[0] = 5//这样是错的
2、数组常用的方法举例
//添加
array.append(4)
//插入
array.insert(5, atIndex:2)
//删除
array.removeAtIndex(2)
//范围性取值和赋值
array[0...2] = [2,3,3]
3、遍历
for也可不写括号,而且不用写数据类型
for value in array{
print(value)
}
五、元组
元组就是元素的组合,在Swift中用来修饰一个复杂的变量,类似于C中的结构体
如:var person = ("xiaoBai".25,"America")
print("person的年龄\(person.1)")//通过.0 .1 .2来取值
可以使用元组同时对多个变量进行赋值,如果元组中某个值不想要,可以用”_”来表示相对应的位置
var(name,_,address) = person //这里的"_"表示忽略第二个元素
六、字典
//<>中写的是键值对的数据类型 key:value
var dic:Dictionary<String:String> = ["k1":"v1","k2":"v2"]
取值:print(dic["k1"])
var dic1 = ["k":"123","k1":123]//不指定类型的时候,也是可以不同数据类型的
print(dic1["k1"])
Swift中字典常用的方法举例
//修改:在Swift中可通过[]的形式找到key所对应的值,然后进行修改
dic["k1"] = "value"
//也可以通过方法
dic.updateValue("value", forKey:"k1")
//删除
dic.removeValueForKey("k2")
//获取字典中的keys和values
dic.values //去出来的是Swift里面的数据格式,不能直接使用
//可将其初始化成一个数组,然后再进行使用
Array(dic.values)
七、流程控制
1、if
Swift中不存在非0即为真的说法,if语句必须是严格的Bool类型,这是因为Swift可以自动推断类型,所以不允许模糊的表达式存在
var j = 1
if 1 == j {
print("j和1相等")
}
2、switch
①必须要有default
②每个case里面至少写一句代码
③每个case自带break
例:
var s = 4
switch s {
case 1:
print("1")
case 2,4: //表示两个case情况一样,用逗号隔开
print("2")
fallthrough //fallthrough关键字表示向下贯穿一个case,写在case的最后,因为遇到fallthrough就会向下贯穿
case 3:
print("3")
default:
print("default")
}
case还可以是一个范围,而且范围可以交叉,如果两个case交叉,只执行第一种情况
var s = 10
switch s{
case 1...15:
print("1...15")
case 5...20:
print("5...20")
default:
print("default")
}
case还可以双重判定
switch s {
case 1...15 where 4 == s:
print("满足情况")
default:
print("default")
}
八、循环语句
white和do-white和C语言区别不大
while s == 4 {
print("while")
}
//do-while 用repeat
repeat {
print("do-while")
}while 4 == s
优化冒泡排序
var array = [0,1,3,2,5]
out: for var i = 0; j < 5-1; i++ {//out是for循环的标签,Swift可以加标签来表示这个循环
var flag = 1 //定义一个标记
for var j = 0; j < 5-1-i; j++ {
if array[j] > array[j+1] {
flag++ //标记变化
var temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
}
}
if 1 == flag {
//如果条件成立,说明在这次整个大循环中没有发生交换,说明已经排出正确的结果了
//跳出循环
//第一种方式
break out //利用标签,跳出标签为out的循环
//第二种方式
//i = 5 //该变i的值结束循环
}
}
九、枚举
enum Season:String{
case spring = "春"
case summer = "夏"
case autumn = "秋"
case winter = "冬"
}
想要获取枚举中真实的值,需要用到rawValue方法
例如:print(Season.spring.rawValue)//rowValue取枚举真实的值
十、函数(方法)
函数的语法
func是函数的关键字
func 函数名(参数列表) ->返回值类型{
函数体
}
1、定义一个函数
func sayHi(name:String)->String{
print("hi\(name)")
return name+" "+"Hello"
}
2、函数的调用
sayHi("巨乐")
3、在Swift中通常使用元组返回多个值
func funName()->(a:Int,b:Int){
let A = 1,B = 2
return (A,B)
}
print(funName().a)
var (age,number) = funName()
4、外部参数名
写完之后还在的参数提示叫做外部参数名
从xcode7开始,只有第一个参数没有外部参数名
func personInfo(name:String,age:Int,address:String)->String {
return name+"\(age)"+adress
}
personInfo("xiaoA", age: 25, address: "China")
//在原来的内部参数名前面可以再添加一个外部参数名
func personInfo(Name name:String,Age age:Int,Address address:String)->String{
return name+"\(age)"+address
}
personInfo(Name: "xiao3", Age: 18, Address: "America")
5、传数值和地址
//传数值
func changeValue(var num:Int){
num++
print(num)
}
var number = 3
changeValue(number)
print(number)
//传地址(关键字inout可以将实参的地址传递给形参)
func changeValue(inout num:Int){
num++
print(num)
}
var number = 3
changeValue(&number)
print(number)
6、函数可以嵌套
func test1() {
func test2() {
print("test2")
}
test2() //嵌套的函数要在内部调用
print("test1")
}
//调用函数
test1()