//================Demo1--Day1=================
/**
*1.常量變量
*/
varstr ="Hello, playground"
print(str)
varmyStr ="Hello,Word"
myStr="王云鵬根欧,你好啊"
letyourStr ="你是常量啊"http://常量不可以修改的
print(myStr)
/**
*2.類型推斷
*/
varint1 =9
//int1 = 10.0這樣的話會報錯赞别,因?yàn)橹耙呀?jīng)判斷int1是整型了
//賦值的時候直接給定類型變量后面聲明類型焦履,用冒號分割贸典。
letint2:Int=9
//創(chuàng)建一個常量视卢,顯式指定類型為Float并指定初始值為4。
letpractiseNumber:Float=4
/**
*3.類型轉(zhuǎn)換
*/
//值永遠(yuǎn)不會被隱式轉(zhuǎn)換為其他類型廊驼。如果你需要把一個值轉(zhuǎn)換成其他類型据过,請顯式轉(zhuǎn)換。
varlabel1 ="The width is"
varwidth=100
//var widthLabel1 = label1 + width這樣會報錯妒挎,因?yàn)閮烧哳愋筒唤y(tǒng)一绳锅,可以轉(zhuǎn)換下
//轉(zhuǎn)換的方式和OC不一樣。括號里面放的是被轉(zhuǎn)換的變量酝掩,類型不加括號
varwidthLabel1 =label1+String(width)
//練習(xí)
varwidth2 =200
//width2 = 1.0現(xiàn)在是不支持float的轉(zhuǎn)換下
varwidth3 =Float(width2)
//width3此時已經(jīng)是float類型的了
letthree =3
letpointOneFourOneFiveNine =0.14159
letpi =three+Int(pointOneFourOneFiveNine)
//有一種更簡單的把值轉(zhuǎn)換成字符串的方法:把值寫到括號中鳞芙,并且在括號之前寫一個反斜杠
varnum1 =12.00
varnum2 =13.00
varnum3:Int=Int(num1+num2)//這樣寫也是可以的,嘿嘿期虾,多多嘗試
//練習(xí):使用\()來把一個浮點(diǎn)計算轉(zhuǎn)換成字符串原朝,并加上某人的名字,和他打個招呼镶苞。
print("你好,\(num1+num2)")
/**
*4.使用方括號[]來創(chuàng)建數(shù)組和字典喳坠,并使用下標(biāo)或者鍵(key)來訪問元素。
*/
//數(shù)組
vararr1 = ["a","b","c","d"]
varnumStr =arr1[2]
print(arr1)
//字典
vardic1 = ["我的名字":"王云鵬",
"你的名字":"毛艷艷"]
varvalueMe =dic1["我的名字"]
varvalueYou =dic1["你的名字"]
varoccupations = [
"Malcolm":"Captain",
"Kaylee":"Mechanic",
]
occupations["Jayne"] ="Public Relations"http://這也算是一個鍵值對的賦值茂蚓,類似于一個插入新的key-value的作用但是好像順序不是按照后來的在后面的順序壕鹉,最后這個怎么在了中間剃幌??難道那個語法是起插入作用么晾浴?锥忿?
print(occupations)
//要創(chuàng)建一個空數(shù)組或者字典,使用初始化語法怠肋。
vararr2 = []//這不也是創(chuàng)建一個空數(shù)組么敬鬓??為什么要使用初始化語法呢?答案在下面
vartemptyArr1 = [String]()//初始化一個空的字符串?dāng)?shù)組
vartemptyArr2 = [Int]()//初始化一個空的整型數(shù)組
//初始化字典
letemptyDictionary = [String:Float]()
//如果類型信息可以被推斷出來笙各,你可以用[]和[:]來創(chuàng)建空數(shù)組和空字典——就像你聲明變量或者給函數(shù)傳參數(shù)的時候一樣钉答。
vararr3NoItem = []
vardic1NoItem = [:]
/**
*5.控制流使用if和switch來進(jìn)行條件操作,使用for-in杈抢、for数尿、while和do-while來進(jìn)行循環(huán)。包裹條件和循環(huán)變量括號可以省略惶楼,但是語句體的大括號是必須的右蹦。
*/
vararr3 = [12,13,14,15,16]
arr3.insert(17, atIndex:arr3.count)//插入一個
varteamScore =0
//快速枚舉forIn遍歷
forscoreinarr3{
ifscore >13{
teamScore+=3
}else{
}
}
print(teamScore)
//在if語句中,條件必須是一個布爾表達(dá)式——這意味著像if score { ... }這樣的代碼將報錯歼捐,而不會隱形地與0做對比何陆。你可以一起使用if和let來處理值缺失的情況。有些變量的值是可選的豹储。一個可選的值可能是一個具體的值或者是nil贷盲,表示值缺失。在類型后面加一個問號來標(biāo)記這個變量的值是可選的剥扣。
//可選的巩剖,等于說是雙份,不賦值的時候它就是個nil注意钠怯?一定要緊跟著類型佳魔,中間不要留空格,否則會報錯
varoptionString1 :String? ="Hello"
print(optionString1=nil)
varoptionString2 :String?//這時候它就是個nil
//練習(xí)
varoptionName :String? ="王云鵬"
vargreeting ="hello"
ifletname =optionName{//這時候name有值了晦炊,表示條件為真啊
greeting="hello,\(greeting)"
}
//練習(xí)把optionalName改成nil鞠鲜,greeting會是什么?添加一個else語句刽锤,當(dāng)optionalName是nil時給greeting賦一個不同的值镊尺。
varoptionName1 :String?
vargreeting1 ="hello"
ifletname1 =optionName1{//無值。缺省為Nil
greeting="hello,\(greeting1)"
}else{
greeting="hello,\(greeting1)"
}
//switch貌似OC里面的switch只能比較各整型好像swift里面的switch支持任意類型的數(shù)據(jù)以及各種比較操作——不僅僅是整數(shù)以及測試相等并思。
letvegetable ="red papper"
switchvegetable{
case"red":
print("匹配錯誤")
case"paper":
print("照樣匹配錯誤")
case"red papper":
print("匹配正確")//匹配到的是這個
default:
print("匹配的亂七八糟")
}
//Tips:運(yùn)行switch中匹配到的子句之后庐氮,程序會退出switch語句,并不會繼續(xù)向下運(yùn)行宋彼,所以不需要在每個子句結(jié)尾寫break弄砍。
//你可以使用for-in來遍歷字典仙畦,需要兩個變量來表示每個鍵值對。字典是一個無序的集合音婶,所以他們的鍵和值以任意順序迭代結(jié)束慨畸。
varfunStrings = ["key1":["我的","毛的"],"key2":["它的","她的","他的"],"key3":["你的","那個人的"]]
//快速枚舉
for(key,content)infunStrings{
ifkey =="key1"{//判斷兩個字符串是否相等。直接這樣等號判斷對么衣式?寸士?
print(content)
}elseifcontent.count==3{
print(key)
}
}
//使用while來重復(fù)運(yùn)行一段代碼直到不滿足條件。循環(huán)條件可以在開頭也可以在結(jié)尾碴卧。
varn =0
varsum =0
whilen<100{
n+=1
sum+=n
}
print(sum)
//for循環(huán)你可以在循環(huán)中使用..<來表示范圍弱卡,也可以使用傳統(tǒng)的寫法,兩者是等價的:
varn1 =0
forvari=0;i<5;++i{
n1+= i
}
print(n1)
varn2 =0
forqin0..<5{
n2+= q
}
print(n2)
/**
*函數(shù)和閉包使用func來聲明一個函數(shù)住册,使用名字和參數(shù)來調(diào)用函數(shù)婶博。使用->來指定函數(shù)返回值。
*無論是形參還是返回值荧飞,都是返回的變量名后面是冒號+類型
*/
//聲明函數(shù)
funcgreet(name:String,content:String) ->String{
return"Hello,\(name+content)"
}
//調(diào)用
varreturnValue:String=greet("王云鵬","給您請安了")
print(returnValue)
//使用元組來讓一個函數(shù)返回多個值凡人。該元組的元素可以用名稱或數(shù)字來表示。
//[Int]這樣表示傳進(jìn)去實(shí)參是個數(shù)組叹阔,只不過是個整型的挠轴,字符串型的自己琢磨
funccalculateStatistics(scores:[Int]) ->(min:Int,max:Int,sum:Int){
varmin = scores[0]
varmax = scores[0]
varsum =0
forscoreinscores {
ifscore > max {
max = score
}elseifscore < min {
min = score
}
sum += score
}
return(min, max, sum)
}
varitems =calculateStatistics([12,13,45,9,10])
print(items.sum)
print(items.2)
//函數(shù)可以帶有可變個數(shù)的參數(shù),這些參數(shù)在函數(shù)內(nèi)表現(xiàn)為數(shù)組的形式:
funcmaybeChange(values:Int...) ->Int{
varsum =0
forvalueinvalues{
sum += value
}
returnsum
}
maybeChange()
maybeChange(21,23,57)
//練習(xí)練習(xí):寫一個計算參數(shù)平均值的函數(shù)条获。
funcgetAverage(numbers:[Int]) ->Float{
varaverage =0
varsum =0
fornumberinnumbers{
sum += number
}
returnFloat(sum) /Float(numbers.count)
}
getAverage([1,2,3,4,5,6])