注意:在創(chuàng)建Swift工程時米母,工程名不能與swift重名勾扭,因為當創(chuàng)建swift工程時,Xcode會自動導入swift類庫铁瞒,一旦重名妙色,Xcode將會找不到swift類庫,導致工程出錯身辨。
import Foundation//當需要導入類庫時定庵,使用 import + 類庫名,不再添加< >或者" "
//在swift中,語句末尾可以不加";"
print("hi")
//但是杂曲,當以在同一行書寫多條語句時,必須用";"隔開
print("Hello");print("World")
1.Swift中的變量和常量
用 let 修飾常量:常量的值不可以改變
用 var 修飾變量:變量的值可以改變
注意:可以使用漢字掩完,表情對常量變量進行命名
1.1 定義常量
let 常量 = "hello"
//常量 = "hi"http://常量的值不可以改變
print(常量)
let a = 1.8234
print(a)
let ?? = "??"
print(??)
1.2 定義變量
var 變量 = "OC"
變量 = "swift"http://變量的值可以修改
print(變量)
var b = 2.22222
print(b)
var ?? = 555555
print(??)
1.3 在swift中,如果開始沒有給數(shù)據(jù)類型,swift會根據(jù)初始值自動判斷數(shù)據(jù)類型
#常量坞笙,變量的數(shù)據(jù)類型
let c:Int = 8//整型
let d:Float = 1.5//單精度浮點型
let e:Double = 3.3333333//雙精度浮點型
let f:String = "String"http://字符串類型寞冯,是有序集合咆疗,可以看成character類型的集合
let g:Character = "a"http://單個字符(使用雙引號)
let flag:Bool = true//布爾類型迅皇,值只有true,false
//數(shù)據(jù)類型的轉(zhuǎn)換:值永遠不會被隱式轉(zhuǎn)換為其他類型,如需轉(zhuǎn)換,請寫明悔据。
let h = String(d)
//可選類型:"?"表示可選類型
//賦初值:如果使用let修飾let修飾可選類型,賦初值
let second:String? = "String"
//不賦初值:如果使用var修飾可選類型,可不賦初值
var first:String? = "String"
2.Swift中的字符串
//1.定義字符串變量
var str1 = "hello 摩托"
//2.創(chuàng)建空變量字符串讨勤,以下兩者均為空字符串屉来,且等價
var empty_str1 = ""
var empty_str2 = String()
//3.通過字符串對象的 isEmpty 方法判斷是否為空
if empty_str1.isEmpty{
print("empty_str1 is empty")
}
//4.字符串拼接
//創(chuàng)建字符串變量
var str2 = "http://"
str2 += "www.baidu.com"
print(str2)
//5.獲取字符串長度
let count_str = "hello"
//獲取長度:“.characters.count”單個字符的個數(shù)
let length = count_str.characters.count
print(length)
//6.字符串比較
let name1 = "lizhen"
let name2 = "jiali"
if name1 == name2{
print("\(name1) = \(name2)")
}else{
print("不等于")
}
//7.字符串的插值
let num = 3.0
let NewNum = "\(num) * 2.5 = \(num * 2.5)"
print(NewNum)
3.Swift中的數(shù)組
1.swift數(shù)組中,存儲的數(shù)據(jù)類型召锈,都必須是同一數(shù)據(jù)類型尝哆。如果想存儲不同的數(shù)據(jù)類型,可以使用OC中的數(shù)組了赌。
2.在swift中砍聊,使用let 和 var聲明一個數(shù)組
3.數(shù)組需要指定類型许饿,如果沒有指定,那么會根據(jù)數(shù)組的初值去推斷數(shù)據(jù)類型
//1.定義數(shù)組
//未給定數(shù)據(jù)類型
let nameArray:Array = ["尼古拉斯凱奇","金凱瑞","奧黛麗赫本"]//根據(jù)初值自動判斷數(shù)據(jù)類型
let genderArray = ["男","男","女"]
//2.數(shù)組元素的訪問
print(nameArray[0])
print("元素2 = ",nameArray[1])
print("元素3 = \(nameArray[2])")
//3.給定數(shù)據(jù)類型
var ageArray:Array<Int> = [1,2,3]
print(ageArray)
//4.給定類型的空數(shù)組
let array = Array<String>()//定義一個字符串類型的空數(shù)組
let _array = [String]()//定義一個字符串類型的空數(shù)組
//5.向數(shù)組中添加元素
//方法一:
ageArray.append(4)
print(ageArray)
//方法二;
ageArray += [5,6]
print(ageArray)
//6.向數(shù)組中某個位置插入元素
ageArray.insert(7, atIndex: 2)
print(ageArray)
//7.移除數(shù)組中第一個元素
ageArray.removeFirst()
print(ageArray)
//8.移除數(shù)組中最后一個元素
ageArray.removeLast()
print(ageArray)
//9.移除數(shù)組中某個位置的元素
ageArray.removeAtIndex(3)
print(ageArray)
4.Swift中的字典
字典中所有的key和value的值必須是同一數(shù)據(jù)類型
//1.定義字典
let let_Dic:Dictionary = ["a":10]//不可變
print(let_Dic)
var var_Dic:Dictionary<String,Int> = ["b":12]//可變
print(var_Dic)
//2.定義空字典
let let_empty_Dic:Dictionary<String,Int> = [:]
var var_empty_Dic:Dictionary<String,Int>
//3.向子典中添加一對鍵值
var_Dic["c"] = 20
print(var_Dic)
var var_Empty:Dictionary<String,Int> = [:]
var_Empty["d"] = 15
print(var_Empty)
//4.修改字典中的一對鍵值
var_Empty["d"] = 2
print(var_Empty)
//5.通過key刪除鍵值
var_Empty.removeValueForKey("d")
print(var_Empty)
5.swift中的元組
元組:是一個數(shù)據(jù)類型
是一個可以返回多個值的數(shù)據(jù)格式
在swift中钾军,聲明元組的時候拗小,用“( )”
元組可以通過下標訪問元組元素,也可以通過key的值去訪問
類似于C語言的結(jié)構(gòu)體阅束,可以放多種數(shù)據(jù)類型
//1.定義一個元組
//方法一:直接初始化一個元組
let status = ("土建",["施工員","質(zhì)檢員","安全員"])
//方法二:
let NewStatus:(String,Array) = ("土建",["施工員","質(zhì)檢員","安全員"])
//2.取出元組中的值得方法
//方法一:直接賦值給常量宿亡,并通過使用標記名來獲取對應的值
let statu:(classRoom:String,couse:Array) = status
var classInfo = statu.classRoom + statu.couse[0] + statu.couse[1]
print(classInfo)
//方法二:通過下標獲取元組元素的值
var classInfo1 = statu.0
print(classInfo1)
var classInfo2 = statu.0 + statu.1[0]
print(classInfo2)
var classInfo3 = statu.0 + statu.1[0] + statu.1[1]
print(classInfo3)
6.Swift中空格
swift中笆搓,不像C挖藏、C++、JAVA里面完全忽視空格继低。swift對空格有一定要求
//1.在swift中熬苍,運算符不能直接跟在變量或常量的后面
//let let_a= 1 + 2//報錯
//2.
//let let_b = 1+ 2//報錯,因為swift認為到1+袁翁,這個語句就結(jié)束了柴底,2開始就是下一個語句了
//3.
let let_c = 1 + 2//編碼規(guī)范推薦使用這種方法
let let_d = 3+4
7.Swift中的循環(huán)
swift 中的循環(huán)結(jié)構(gòu)包括:for、for-in粱胜、while柄驻、repeat-while
//for循環(huán)
for var i = 0; i < 10; i++ {
print("I LOVE YOU")
}
//for-in循環(huán)
for number in 1..<10 {//"..<"開區(qū)間,表示1-9焙压,不包括10
print(number)
}
for number in 1...10 {//"..."閉區(qū)間鸿脓,表示1-10
print(number)
}
//while循環(huán)
var j = 5
while j > 0{
j--
print(j)
}
//repeat-while循環(huán):先執(zhí)行一次循環(huán)體抑钟,在判斷條件(循環(huán)體至少被執(zhí)行一次)
repeat{
print("repeat...while")
}while 1 < 0
//循環(huán)遍歷數(shù)組
var animalsArray = ["dog","cat","pig","tiger"]
for a in animalsArray{
print(a)
}
//循環(huán)遍歷字典
var animalsDic = ["cat":"??","monkey":"??"]
for (key,value) in animalsDic{
print("key = \(key),value = \(value)")
}
8.Swift中的分支結(jié)構(gòu)
swift中分支結(jié)構(gòu):if、if-else野哭、switch...case
//if在塔、if-else
let flag1 = true
if flag1 == true{
print("flag = \(flag1)")
}else{
print("為假")
}
//switch...case (默認自帶break)
let temp = 20
//特點1:switch中想要實現(xiàn)貫穿,使用關(guān)鍵字fallthrough
switch temp{
case 0:
print("0")
fallthrough
case 10:
print("10")
fallthrough
default:
print("Other")
}
//特點2:case后面可以是定義一個變量拨黔,where后面是被定義變量需要滿足的條件
switch temp{
case var i where temp >= 0 && temp < 10:
i = 20
print(i)
default:
print("Other")
}
//特點3:case后面可以是一個范圍
switch temp{
case 0..<10:
print("范圍在0-9蛔溃,不包括10")
case 10...100:
print("范圍在10-100,包括100")
default:
print("Other")
}
//特點4:switch...case可以匹配一個元組
let point = (10,10)
switch point{
case (0,10):
print("case1")
case (10,0):
print("case2")
case (10,10):
print("case3")
default:
print("Other")
}
9.Swift中的枚舉
C語言中篱蝇,枚舉類型的枚舉值和一個整型數(shù)值相對應
而swift中的枚舉更加靈活贺待,不必給每一個枚舉成員提供一個確定的枚舉值
如果給枚舉成員提供一個值(稱為“原始值”),則該值得類型可以是字符串零截,字符麸塞,或是一個整形值或浮點數(shù)
//定義一個枚舉類型,原始類型為String
enum animalsEnum:String {
case cat = "貓"
case dog = "狗"
case duck = "鴨子"
}
print(animalsEnum.cat.rawValue)//rawValue打印原始值
print(animalsEnum.dog.hashValue)//hashValue打印哈希值
//使用原始值創(chuàng)建一個變量
var dir = animalsEnum(rawValue: "狗")//表示取得的是原始值為“狗”的那個枚舉成員名涧衙,而枚舉成員的類型為:animalsEnum
print(dir)
10.Swift中的函數(shù)
swift中里面用“func”表示聲明一個函數(shù)
swift的文件格式里面哪工,沒有類似于OC的.h文件,所以弧哎,需要定義一個私有函數(shù)正勒,可以砸愛func前面加private修飾
函數(shù)格式:
func 函數(shù)名(參數(shù)名:參數(shù)類型,參數(shù)名:參數(shù)類型....)->返回值類型{
實現(xiàn)內(nèi)容
return 返回值
}
//1.定義無參無返回值函數(shù)
func sayHi()->Void{
print("Hi")
}
sayHi()
//2.有參無返回值函數(shù)
func sayHello(hello:String)->Void{
print(hello)
}
sayHello("hello")
//3.無參有返回值函數(shù)
func money()->String{
return "No money"
}
let str = money()
print(str)
//4.有參有返回值函數(shù)
func number(a:Int,b:Int)->Int{
return a + b
}
var add = number(6, b: 6)
print(add)
//5.有參數(shù),多返回值函數(shù)
func all(number:Int,number2:Int)->(Int,Int,Int,Int){
return (number + number2,number - number2,number * number2,number / number2)
}
let result = all(5, number2: 2)
print(result)
//6.內(nèi)參和外參
/*
swift中傻铣,一個參數(shù)有兩個名字,內(nèi)部參數(shù)名 和 外部參數(shù)名
內(nèi)部參數(shù)名:在函數(shù)內(nèi)部使用的參數(shù)名稱
外部參數(shù)名:在函數(shù)調(diào)用時候祥绞,顯示的參數(shù)名稱
*/
func hero(first one:String,second two:Int){
print(one,two)//使用內(nèi)參
}
hero(first: "蓋倫", second: 60)//顯示外參
/** 注意:
在默認情況下非洲,函數(shù)的第一個參數(shù),不顯示外部參數(shù)名蜕径,其余參數(shù)两踏,顯示外部參數(shù)名,并且和內(nèi)部參數(shù)名名字一致
如果不嫌顯示外部參數(shù)名兜喻,可以使用“_"省略梦染,但是,函數(shù)的第一個參數(shù)不能使用"_"省略外部參數(shù)名
*/
func text(one:Int,_ two:Int){
print(one,two)
}
text(5, 0)
/** inout參數(shù)
函數(shù)參數(shù)朴皆,如果不給數(shù)據(jù)類型帕识,默認為let,如果在參數(shù)面前加var遂铡,就可以修改參數(shù)
但是肮疗,如果參數(shù)前面加“inout”來修飾,那么就成了輸入輸出函數(shù)扒接,如果在函數(shù)內(nèi)部修改參數(shù)伪货,可以影響到外部變量的值
*/
var name = "豆豆"
func NewName(inout name1:String){
name1 = "小花"http://修改name值
print("name修改為:",name1)
}
NewName(&name)//傳的是地址
print("修改后的值:",name)
//函數(shù)的嵌套
func outer(){
print("外部函數(shù)")
func inside(){
print("內(nèi)部函數(shù)")
}
inside()//在外部函數(shù)中調(diào)用內(nèi)部函數(shù)
}
outer()//在外部函數(shù)的外面们衙,調(diào)用外部函數(shù)