//================Demo1--Day1=================
/**
*1.常量變量
*/
varstr ="Hello, playground"
print(str)
varmyStr ="Hello,Word"
myStr="王云鵬,你好啊"
letyourStr ="你是常量啊"http://常量不可以修改的
print(myStr)
/**
*2.類型推斷
*/
varint1 =9
//int1 = 10.0這樣的話會(huì)報(bào)錯(cuò),因?yàn)橹耙呀?jīng)判斷int1是整型了
//賦值的時(shí)候直接給定類型變量后面聲明類型,用冒號(hào)分割。
letint2:Int=9
//創(chuàng)建一個(gè)常量,顯式指定類型為Float并指定初始值為4。
letpractiseNumber:Float=4
/**
*3.類型轉(zhuǎn)換
*/
//值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其他類型。如果你需要把一個(gè)值轉(zhuǎn)換成其他類型,請(qǐng)顯式轉(zhuǎn)換。
varlabel1 ="The width is"
varwidth=100
//var widthLabel1 = label1 + width這樣會(huì)報(bào)錯(cuò),因?yàn)閮烧哳愋筒唤y(tǒng)一,可以轉(zhuǎn)換下
//轉(zhuǎn)換的方式和OC不一樣。括號(hào)里面放的是被轉(zhuǎn)換的變量,類型不加括號(hào)
varwidthLabel1 =label1+String(width)
//練習(xí)
varwidth2 =200
//width2 = 1.0現(xiàn)在是不支持float的轉(zhuǎn)換下
varwidth3 =Float(width2)
//width3此時(shí)已經(jīng)是float類型的了
letthree =3
letpointOneFourOneFiveNine =0.14159
letpi =three+Int(pointOneFourOneFiveNine)
//有一種更簡(jiǎn)單的把值轉(zhuǎn)換成字符串的方法:把值寫(xiě)到括號(hào)中,并且在括號(hào)之前寫(xiě)一個(gè)反斜杠
varnum1 =12.00
varnum2 =13.00
varnum3:Int=Int(num1+num2)//這樣寫(xiě)也是可以的,嘿嘿,多多嘗試
//練習(xí):使用\()來(lái)把一個(gè)浮點(diǎn)計(jì)算轉(zhuǎn)換成字符串,并加上某人的名字,和他打個(gè)招呼。
print("你好,\(num1+num2)")
/**
*4.使用方括號(hào)[]來(lái)創(chuàng)建數(shù)組和字典,并使用下標(biāo)或者鍵(key)來(lái)訪問(wèn)元素。
*/
//數(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://這也算是一個(gè)鍵值對(duì)的賦值,類似于一個(gè)插入新的key-value的作用但是好像順序不是按照后來(lái)的在后面的順序,最后這個(gè)怎么在了中間??難道那個(gè)語(yǔ)法是起插入作用么??
print(occupations)
//要?jiǎng)?chuàng)建一個(gè)空數(shù)組或者字典,使用初始化語(yǔ)法。
vararr2 = []//這不也是創(chuàng)建一個(gè)空數(shù)組么??為什么要使用初始化語(yǔ)法呢?答案在下面
vartemptyArr1 = [String]()//初始化一個(gè)空的字符串?dāng)?shù)組
vartemptyArr2 = [Int]()//初始化一個(gè)空的整型數(shù)組
//初始化字典
letemptyDictionary = [String:Float]()
//如果類型信息可以被推斷出來(lái),你可以用[]和[:]來(lái)創(chuàng)建空數(shù)組和空字典——就像你聲明變量或者給函數(shù)傳參數(shù)的時(shí)候一樣。
vararr3NoItem = []
vardic1NoItem = [:]
/**
*5.控制流使用if和switch來(lái)進(jìn)行條件操作,使用for-in、for、while和do-while來(lái)進(jìn)行循環(huán)。包裹條件和循環(huán)變量括號(hào)可以省略,但是語(yǔ)句體的大括號(hào)是必須的。
*/
vararr3 = [12,13,14,15,16]
arr3.insert(17, atIndex:arr3.count)//插入一個(gè)
varteamScore =0
//快速枚舉forIn遍歷
forscoreinarr3{
ifscore >13{
teamScore+=3
}else{
}
}
print(teamScore)
//在if語(yǔ)句中,條件必須是一個(gè)布爾表達(dá)式——這意味著像if score { ... }這樣的代碼將報(bào)錯(cuò),而不會(huì)隱形地與0做對(duì)比。你可以一起使用if和let來(lái)處理值缺失的情況。有些變量的值是可選的。一個(gè)可選的值可能是一個(gè)具體的值或者是nil,表示值缺失。在類型后面加一個(gè)問(wèn)號(hào)來(lái)標(biāo)記這個(gè)變量的值是可選的。
//可選的,等于說(shuō)是雙份,不賦值的時(shí)候它就是個(gè)nil注意?一定要緊跟著類型,中間不要留空格,否則會(huì)報(bào)錯(cuò)
varoptionString1 :String? ="Hello"
print(optionString1=nil)
varoptionString2 :String?//這時(shí)候它就是個(gè)nil
//練習(xí)
varoptionName :String? ="王云鵬"
vargreeting ="hello"
ifletname =optionName{//這時(shí)候name有值了,表示條件為真啊
greeting="hello,\(greeting)"
}
//練習(xí)把optionalName改成nil,greeting會(huì)是什么?添加一個(gè)else語(yǔ)句,當(dāng)optionalName是nil時(shí)給greeting賦一個(gè)不同的值。
varoptionName1 :String?
vargreeting1 ="hello"
ifletname1 =optionName1{//無(wú)值。缺省為Nil
greeting="hello,\(greeting1)"
}else{
greeting="hello,\(greeting1)"
}
//switch貌似OC里面的switch只能比較各整型好像swift里面的switch支持任意類型的數(shù)據(jù)以及各種比較操作——不僅僅是整數(shù)以及測(cè)試相等。
letvegetable ="red papper"
switchvegetable{
case"red":
print("匹配錯(cuò)誤")
case"paper":
print("照樣匹配錯(cuò)誤")
case"red papper":
print("匹配正確")//匹配到的是這個(gè)
default:
print("匹配的亂七八糟")
}
//Tips:運(yùn)行switch中匹配到的子句之后,程序會(huì)退出switch語(yǔ)句,并不會(huì)繼續(xù)向下運(yùn)行,所以不需要在每個(gè)子句結(jié)尾寫(xiě)break。
//你可以使用for-in來(lái)遍歷字典,需要兩個(gè)變量來(lái)表示每個(gè)鍵值對(duì)。字典是一個(gè)無(wú)序的集合,所以他們的鍵和值以任意順序迭代結(jié)束。
varfunStrings = ["key1":["我的","毛的"],"key2":["它的","她的","他的"],"key3":["你的","那個(gè)人的"]]
//快速枚舉
for(key,content)infunStrings{
ifkey =="key1"{//判斷兩個(gè)字符串是否相等。直接這樣等號(hào)判斷對(duì)么??
print(content)
}elseifcontent.count==3{
print(key)
}
}
//使用while來(lái)重復(fù)運(yùn)行一段代碼直到不滿足條件。循環(huán)條件可以在開(kāi)頭也可以在結(jié)尾。
varn =0
varsum =0
whilen<100{
n+=1
sum+=n
}
print(sum)
//for循環(huán)你可以在循環(huán)中使用..<來(lái)表示范圍,也可以使用傳統(tǒng)的寫(xiě)法,兩者是等價(jià)的:
varn1 =0
forvari=0;i<5;++i{
n1+= i
}
print(n1)
varn2 =0
forqin0..<5{
n2+= q
}
print(n2)
/**
*函數(shù)和閉包使用func來(lái)聲明一個(gè)函數(shù),使用名字和參數(shù)來(lái)調(diào)用函數(shù)。使用->來(lái)指定函數(shù)返回值。
*無(wú)論是形參還是返回值,都是返回的變量名后面是冒號(hào)+類型
*/
//聲明函數(shù)
funcgreet(name:String,content:String) ->String{
return"Hello,\(name+content)"
}
//調(diào)用
varreturnValue:String=greet("王云鵬","給您請(qǐng)安了")
print(returnValue)
//使用元組來(lái)讓一個(gè)函數(shù)返回多個(gè)值。該元組的元素可以用名稱或數(shù)字來(lái)表示。
//[Int]這樣表示傳進(jìn)去實(shí)參是個(gè)數(shù)組,只不過(guò)是個(gè)整型的,字符串型的自己琢磨
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ù)可以帶有可變個(gè)數(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í):寫(xiě)一個(gè)計(jì)算參數(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])