swift基礎(chǔ)語(yǔ)法可以在playground中編寫,這樣直接可以在右側(cè)看到結(jié)果,不需要運(yùn)行
1.1標(biāo)識(shí)符
定義標(biāo)識(shí)符時(shí),必須指出是變量還是常量
格式:標(biāo)識(shí)符 : 類型
let定義常量,一旦定義就不可更改
var定義變量,可以更改
let age : Int = 30
let n : Double = 3.00
var age :Int = 30
變量和常量的命名
let pi = 3.13
let 你好 = "你好世界"
let ?? = "monkey"
let n123 = "sss"
在命名一個(gè)編程元素時(shí)英妓,要遵循下列命名規(guī)則:
名稱的第一個(gè)字符必須是字母或漢字唧垦。
不能在名稱中使用空格十拣、句點(diǎn)(.)、感嘆號(hào)(!)键俱、@、&、$、#等已有特殊含義的字符板惑。
3.不能超過255個(gè)字符,控件笼蛛、窗體洒放、類和模塊的名字蛉鹿,不能超過40個(gè)字符滨砍。不要與已有的關(guān)鍵字同名,否則妖异,在編程中會(huì)出現(xiàn)很多麻煩惋戏。
-
在自定義名稱時(shí),除了必須遵循VB的命名規(guī)則外他膳,還要使一個(gè)名字能反映它所代表的編程元素的意義
注意:
1.在開發(fā)中優(yōu)先使用常量,只有在需求更改的時(shí)候,在將let改為var
2.常量的意思是:指向的對(duì)象不可修改,即指針不可修改,但是可以通過指針拿到對(duì)象,修改其中的屬性let view : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = UIColor.redColor()//在swift中使用枚舉類型,類型.具體的類型
let btn : UIButton = UIButton(type: UIButtonType.ContactAdd)
btn.center = CGPoint.init(x: 50, y: 50)
view.addSubview(btn)
1.2Swift的類型推導(dǎo)
1.如果定義標(biāo)識(shí)符時(shí),直接賦值,那么標(biāo)識(shí)符后面的類型可以省略
2.Swift中有類型推導(dǎo),可以根據(jù)后面的賦值決定前面標(biāo)識(shí)符的數(shù)據(jù)類型
3.可以通過option + 鼠標(biāo)左鍵,進(jìn)行查看數(shù)據(jù)的類型
2.Swift中的數(shù)據(jù)類型
類型轉(zhuǎn)換:
1.將Double類型轉(zhuǎn)換為Int類型,Int(Double)
哎,前面截圖截到了,還要寫么,好糾結(jié)啊......寫,不寫,寫,不寫,算了還是寫吧~
let dou1 = Int(Double)
2.將Int轉(zhuǎn)換為String , Int(String)
let doub2 = String(dou1)
3.將String轉(zhuǎn)換為Float類型,String(Float)
let doub3 = Float(doub2)
格式我就不總結(jié)了........
3.判斷
3.1if 語(yǔ)句
要求:
1.判斷句可以不加()
2.判讀句必須有一個(gè)真假值(哦~,忘記說了,Swift中Bool類型,真為true,假為false)
格式:
if 條件 {
若條件為真則執(zhí)行這部分語(yǔ)句
} else {
若條件為假則執(zhí)行這部分語(yǔ)句
}
看到這里你一定困了吧,我也困了,所有就不舉例子了,相信你也會(huì)的
3.2 guard
1.guard是swift2.0新增的語(yǔ)法,與if非常相似,其設(shè)計(jì)的目的是提高程序的可讀性
2.guard語(yǔ)句必須自帶其好基友else
格式:
guard 條件表達(dá)式 else{
break
}
語(yǔ)句組
語(yǔ)法:
1.當(dāng)條件表達(dá)式為true的時(shí)候,跳過else語(yǔ)句的內(nèi)容,直接執(zhí)行語(yǔ)句組
2.條件表達(dá)式為false的時(shí)候,執(zhí)行else語(yǔ)句的內(nèi)容,其跳轉(zhuǎn)語(yǔ)句一般為return ,break,continue和throw
3.guard在函數(shù)里面使用,不在函數(shù)里使用return ,break.....就不知道該干啥了
人吧,一困就懶,這個(gè)我也不想舉例子了....,但是我怕你直接關(guān)網(wǎng)頁(yè),這個(gè)威脅很厲害的,所有................
補(bǔ)充知識(shí):
swift中控制轉(zhuǎn)移關(guān)鍵詞:
break continue fallthrough return throw
1.return :可以結(jié)束一個(gè)循環(huán),或者函數(shù)
2.break語(yǔ)句將終止整個(gè)循環(huán)的執(zhí)行,可以在循環(huán)語(yǔ)句中,也可以用于switch語(yǔ)句中
3.continue:通常用于循環(huán)中,告訴循環(huán)停止現(xiàn)在執(zhí)行的語(yǔ)句,開始下一次循環(huán)
//func 函數(shù)名(標(biāo)示符: 類型) ->
func sleep(time: Int) -> Bool {
guard time >= 22 else{
//如果判斷就為假,會(huì)執(zhí)行else
print("困著")//print后面會(huì)有自動(dòng)換行符的
return true
}
//如果為真,繼續(xù)執(zhí)行
print("睡覺")
return false
}
sleep(20)
現(xiàn)在過20點(diǎn)了,因?yàn)槭褂玫氖莚eturn語(yǔ)句,所以只會(huì)說困著,所有困但是不讓走睡覺,這個(gè)男朋友當(dāng)?shù)牟恍?所有困了不讓睡覺一定是錯(cuò)的,女朋友可是會(huì)生氣的
正好對(duì)比下guard和if的區(qū)別
if語(yǔ)句
for a in 0...4
{
if a == 2{
continue
print(a) //這條語(yǔ)句用戶不會(huì)被執(zhí)行
}
print(a) //輸出0,1,,3,4
}
guard語(yǔ)句
for a in 0...4{
guard a != 2 else{
continue
print(a) //這條語(yǔ)句永遠(yuǎn)不會(huì)被用戶執(zhí)行
}
print(a) //輸出0,1,3,4
}
break:
//if語(yǔ)句
for a in 0...3{
if a == 2{
break
}
print(a) //輸出0,1
}
//guard語(yǔ)句
for a in 0...3{
guard a != 2 else{
print(a)
break
}
print(a) //輸出0,1
}
你問我...什么意思,那就涉及令一個(gè)話題了,那個(gè)話題就是區(qū)間
區(qū)間分為開區(qū)間和畢區(qū)間
開區(qū)間: 0~10,包括0但是不包括10,跟數(shù)學(xué)中的開區(qū)間是不同的,這個(gè)是前畢后開的,[0,10], Swift中寫法就是0..<10(中間都不要空格,有空格就會(huì)報(bào)錯(cuò)的)
閉區(qū)間:0~10,包括0也包括10,是前閉后閉的,Swift中寫法 0...10
3.3 switch
先比較和OC中的不同:
1.switch后可以不加()
2.case后面可以不跟break,默認(rèn)會(huì)有break的
3.switch中要把所有情況都列舉出來(lái),不然會(huì)報(bào)錯(cuò)的
switch的基本用法:
let sex = 0
switch sex{
case 0:
print("男")
case 1:
print("女")
default:
print("未知")
}
switch:case穿透
要實(shí)現(xiàn)這個(gè)效果,需要另外一個(gè)關(guān)鍵字fallthrough
fallthrough:由于switch中的switch語(yǔ)句不會(huì)自動(dòng)的因?yàn)闆]有break而跳轉(zhuǎn)下一個(gè)case,因此如果想要像C語(yǔ)言那樣,一次執(zhí)行每一個(gè)case就需要fallthrough
switch sex{
case 0:
print("ddd")
fallthrough
case 1:
print("ssss")
default:
print("")
}
3.case中判斷多個(gè)條件
switch sex{
case 0, 1:
print("正常")
default:
print("")
}
4.判斷浮點(diǎn)型(OC中只能判斷基本數(shù)據(jù)類型)
let a = 3.14
switch a{
case 3.14:
print("pi")
default:
print("no pi")
}
5.判斷字符串
let a = "pi"
switch a{
case "pi":
print("pi")
default:
print("no pi")
}
6.判斷區(qū)間:
let score = 88
switch score {
case 0..<60 :
print("不及格")
case 60..<70:
print("剛及格")
case 70..<90:
print("良好")
case 90...100:
print("優(yōu)秀")
default:
print("錯(cuò)誤")
}
序號(hào)寫到哪里了,你不記得了吧,恩那太好了,我也不記得了,就隨便寫了~~~
4.循環(huán)
4.1 for循環(huán)
先說我們?cè)贠C中常規(guī)的寫法:
for (var i = 0 ; i < 10; i++){
print(i)
}
相信你在Swift中這樣寫,編譯器一定會(huì)給你提示的,讓你改,因?yàn)樗X得寫得太繁瑣了
試試我們第二種寫法
for i in 0..<10{
print(i)
}
還有一種寫法,當(dāng)我們不關(guān)心i是什么的時(shí)候,就直接可以使用'_'來(lái)代替'i'
for _ in 0..<10{
print("hello world")
}
4.2while循環(huán),跟OC中差別不大,不解釋
4.3do ....while循環(huán)
var s = 0
do {
s += 1;
print(s)
}while (s == 10)
這樣寫,編譯器會(huì)給你提示,使用編譯器提示的就對(duì)了,do.....while正式改名為repeat......while了,還是原來(lái)的味道,還是原來(lái)的配方.
9.20更新
swift中跳出 雙層循環(huán):
findAnswer: for m in 1...300{
for n in 1...30{
if m*m*m*m - n*n == 15*m*n{
print(m , n)
break findAnswer //跳出整個(gè)循環(huán),想當(dāng)與C語(yǔ)言中的goto語(yǔ)句不建議使用
}
}
}
switch case 中進(jìn)行解包
let point5 = (8,0)
switch point5 {
case (0,0):
print ("It's origin")
case (let x , 0)://這種形式可以理解為任意x的值,y的值為0,與使用_忽略x值不同,把x的值賦給新生成的變量,下面可能使用這個(gè)變量
print("It on the x-axis")
print("The x value is \(x)")
// fallthrough //可以跳進(jìn)下一個(gè)case
case (0, let y):
print("The y value is \(y)")
case (let x, let y):
break
}
where與模式匹配
let point4 = (3, 3)
switch point4{
case let (x, y) where x == y: //限制case所列出的模式
print("It's on the line x == y")
case let (x, y) where x == -y:
print("It's on the line x == -y")
case let (x, y):
print("It's just an ordinary point")
print("The point is (\(x), \(y))")
}
let age = 19
switch age{
case 10...19:
print("You're a teenager")
default :
print("You're not a teenager")
}
//模式樣放在前面等于的變量要放在后面 if case 用法
if case 10...19 = age{
print("You're a teenager")
}
if case 10...19 = age where age > 18{
print("")
}
//
let vector = (4,0)
if case (let x, 0) = vector where x > 2 && x < 5{
print("It's the vector")
}
//
for i in 1...100{
if i % 3 == 0{
print(i)
}
}
for case let i in 1...100 where i % 3 == 0{
print(i)
}