進階16 Swift1 基礎(chǔ)

注意:在創(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ù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碱呼,隨后出現(xiàn)的幾起案子蒙挑,更是在濱河造成了極大的恐慌,老刑警劉巖愚臀,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忆蚀,死亡現(xiàn)場離奇詭異,居然都是意外死亡懊悯,警方通過查閱死者的電腦和手機蜓谋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炭分,“玉大人桃焕,你說我怎么就攤上這事∨趺” “怎么了观堂?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呀忧。 經(jīng)常有香客問我师痕,道長,這世上最難降的妖魔是什么而账? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任胰坟,我火速辦了婚禮,結(jié)果婚禮上泞辐,老公的妹妹穿的比我還像新娘笔横。我一直安慰自己,他們只是感情好咐吼,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布吹缔。 她就那樣靜靜地躺著,像睡著了一般锯茄。 火紅的嫁衣襯著肌膚如雪厢塘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天肌幽,我揣著相機與錄音晚碾,去河邊找鬼。 笑死牍颈,一個胖子當著我的面吹牛迄薄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煮岁,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讥蔽,長吁一口氣:“原來是場噩夢啊……” “哼涣易!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冶伞,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤新症,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后响禽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徒爹,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年芋类,在試婚紗的時候發(fā)現(xiàn)自己被綠了隆嗅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡侯繁,死狀恐怖胖喳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贮竟,我是刑警寧澤丽焊,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站咕别,受9級特大地震影響技健,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惰拱,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一雌贱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偿短,春花似錦帽芽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽披泪。三九已至纤子,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間款票,已是汗流浹背控硼。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艾少,地道東北人卡乾。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像缚够,于是被迫代替她去往敵國和親幔妨。 傳聞我的和親對象是個殘疾皇子鹦赎,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容