swift基礎(chǔ)

一下筆記是在學(xué)習(xí)swift的時(shí)候做的,比較亂,可以將就的看一下,swift這一門語言我認(rèn)為是比較理性理想的,比oc來說感覺更合理,如果swift真要是熟練了,在開發(fā)過程中肯定比oc簡單的多.

常量與變量

/*

let:常量一經(jīng)賦值就不能被更改

var:變量可以被更改

盡量使用常量等到需要修改的時(shí)候在改成使用var來修飾

option + click最常用的熱鍵值沒有之一

在swift中整數(shù)的默認(rèn)類型是Int OC中: NSInteger

小數(shù)的默認(rèn)類型是Double

OC沒有默認(rèn)的小數(shù)類型

1.swift中數(shù)據(jù)的類型是自動(dòng)推導(dǎo)的根據(jù)'='右邊的類型來去推斷變量的具體類型

2.swift是一個(gè)類型極其苛刻的語言

3.不同的數(shù)據(jù)類型之間不能夠直接運(yùn)算swift中不支持隱含形式的轉(zhuǎn)換類型

4.提前聲明類型: let變量名:類型

可選項(xiàng)與必選項(xiàng)

//可選項(xiàng): ?(有值嗎)? 1.有值2.沒有值(nil)

//必選項(xiàng): !程序員承諾一定有值同樣也表示強(qiáng)制解包

//可選項(xiàng)是OC程序員接觸到swift最不適應(yīng)的一個(gè)地方

//1.加強(qiáng)對(duì)可選項(xiàng)的理解

//2.可以根據(jù)Xcode的智能提示來進(jìn)行解決

//3.每添加一個(gè)'!'的時(shí)候都需要思考為什么,安全嗎程序員承諾一定有值

//fatal(致命的) error: unexpectedly found nil while

unwrapping(解包) an Optional value

/*

1.可選項(xiàng)在打印的時(shí)候會(huì)自動(dòng)帶上Optional(10)

2.可選項(xiàng)不能夠直接參與運(yùn)算

*/

funcdemo1() {

//聲明可選項(xiàng)在類型后面追加'?"

vara:Int?

if(a !=nil){

print(a! +10)

}

}

swithc case

//switch

case

//1.每個(gè)case分支必須要有一段可以執(zhí)行的代碼

//2.臨時(shí)變量的定義不需要加在{}中

//3.OC中只能判斷基本數(shù)據(jù)swift中可以判斷任意類型(字符串)

//4.可以同時(shí)case多個(gè)選項(xiàng)

//5.不需要寫break

funcdemo7() {

letm ="22200"

switchm {

case"18000","22200":

leti =10

print("高級(jí)工程師")

case"8000":

print("初級(jí)工程師")

default:

print("你是猴子派來的嗎")

}

}

"??"雙問好操作符

// ??在判斷字符串或者基本數(shù)據(jù)類型的時(shí)候用處很大

//操作符:快速判斷可選項(xiàng)是否為nil如果為nil給定默認(rèn)值

//

tableView數(shù)據(jù)源方法list?.count ?? 0

funcdemo6() {

vara:Int?

//必選項(xiàng)

letb = (a ??1) +10

print(b)

}

分支結(jié)構(gòu)

//guard(守衛(wèi)) let ... else和if let的作用剛好相反

//能夠減少一層分支嵌套

//Xcode

7.0? swift2.0才推出的語法

//在項(xiàng)目使用的非常多

funcdemo5() {

leturlString

="http://www.douni.com?type=中國"

guardleturl =NSURL(string: urlString)else{

//如果url為nil當(dāng)前代碼就直接返回

return

}

//程序運(yùn)行到這里'守衛(wèi)'的對(duì)象就一定有值

letrequest =NSURLRequest(URL: url)

print(request)

}

//

if let快速賦值并且判斷是否為空不為空才能夠進(jìn)入分支意味著值就是一個(gè)必選項(xiàng)

funcdemo4() {

//url中包含中文需要轉(zhuǎn)義

leturlString ="http://www.douni.com?type"

ifleturl =NSURL(string: urlString) {

letrequest =NSURLRequest(URL: url)

print(request)

}

}

weak和unowned的區(qū)別

weak回收掉時(shí)自動(dòng)指向nil安全unowned相當(dāng)于assign,回收掉的時(shí)候指向原來的地址,是野指針不安全

swift面向?qū)ο蟮某跏蓟^程-->先初始化子類-->再初始化父類和oc相反

重寫是父類有同樣的方法或者屬性

重載是面向?qū)ο蟮?相同的方法名得到不同的功能

Git.OSChinaNeXTSTEP

函數(shù)的應(yīng)用

/*

swift中調(diào)用本類的函數(shù)和屬性self可以省略也可以加上閉包內(nèi)調(diào)用本類的函數(shù)和屬性時(shí)必須加self

*/

classViewController:UIViewController{

overridefuncviewDidLoad() {

super.viewDidLoad()

//函數(shù)的調(diào)用

//函數(shù)的第一個(gè)參數(shù)名稱可以省略

//

let result = square(width: 10, height: 20)

//

print(result)

}

//函數(shù)的外部參數(shù)

//外部參數(shù)width是提供給調(diào)用方來進(jìn)行使用的

//內(nèi)部參數(shù)a是提供給函數(shù)內(nèi)部使用的

funcsquare(width a:Int,heightb:Int) ->Int{

returna * b

}

//函數(shù)沒有返回值的三種寫法

//1.沒有返回值的第一種寫法

funcdemo1() -> () {

print("哈哈哈")

}

//2.第二種寫法Void V要大些

funcdemo2() ->Void{

print("嘻嘻嘻")

}

//3.函數(shù)沒有返回值的第三種寫法

funcdemo3() {

print("黑hi額hi額")

}

便利的構(gòu)造函數(shù)

convenienceinit?(name:String, age:Int){

//通常年齡需要做合法性的檢查讓一個(gè)人年齡在一個(gè)合法區(qū)間內(nèi)

ifage <0|| age >1000{

//不能夠?qū)嵗搶?duì)象必須是失敗的構(gòu)造器才能夠返回nil

returnnil

}

//保證對(duì)象在滿足條件下能夠被實(shí)例化

//生寫指定構(gòu)造函數(shù)

self.init(dict:["name": name,"age": age])

}

便利構(gòu)造函數(shù)是為本類中已經(jīng)實(shí)例化的屬性或者方法添加限制條件,調(diào)用本類的構(gòu)造方法,使用self.init,不能用super和被重寫,也可以被繼承

在swift中創(chuàng)建項(xiàng)目名稱的時(shí)候,如果項(xiàng)目名稱是(數(shù)字.中文),會(huì)在向數(shù)組中添加元素可能會(huì)報(bào)野指針的錯(cuò)誤,血的教訓(xùn)

類型轉(zhuǎn)換as的使用

1.as, String <==> NSString[XXX] <==> NSArray[key : value] <==> NSDictionary

2.as?接收的數(shù)據(jù)類型是可選類型就使用as?嘗試性的去轉(zhuǎn)換一次

3.as!結(jié)束的數(shù)據(jù)類型是必選類型一定需要轉(zhuǎn)換某一個(gè)類型

構(gòu)造函數(shù)必須保證每個(gè)必選屬性都初始化有初始值

2x對(duì)應(yīng)是4和4s的屏幕尺寸3.5的屏幕640 x 960 pixels

Retina4對(duì)應(yīng)的是5,5s,5c的屏幕640 x 1136 pixels

Retina4.7對(duì)應(yīng)的是6和6s的屏750 x 1334 pixels

Retina5.5對(duì)應(yīng)的是6plus和6splus的屏幕1242 x 2208 pixels

在眾多類中找出自己要快速查看的代碼

打開視圖層次查看器找到對(duì)應(yīng)的文件復(fù)制文件名

cmd+ shit + o快速查找文件

cmd+ shit + j快速定位文件

使用addTarget添加點(diǎn)擊時(shí)候的時(shí)候,如果不希望外界訪問方法前加private但是運(yùn)行時(shí)候會(huì)蹦

因?yàn)橐坏┦褂昧薬ddTarget在運(yùn)行循環(huán)時(shí)候無法找到該方法

在方法前添加@objc告訴運(yùn)行循環(huán),這個(gè)方法是基于OC消息動(dòng)態(tài)派發(fā)機(jī)制來執(zhí)行的

//自定義訪客視圖

//默認(rèn)的構(gòu)造方法一旦從寫init(frame方法會(huì)自動(dòng)調(diào)用required init?(coder

aDecoder: NSCoder) {

overrideinit(frame:CGRect) {

//調(diào)用父類的構(gòu)造方法

super.init(frame:frame)

setupUI()

}

//一旦重寫了init(frame方法之后系統(tǒng)會(huì)默認(rèn)該視圖會(huì)通過手寫代碼創(chuàng)建

//系統(tǒng)就不會(huì)再讓同構(gòu)xib加載視圖

//通過xib加載的UIView及其子類會(huì)調(diào)用這個(gè)方法

requiredinit?(coderaDecoder:NSCoder) {

//系統(tǒng)默認(rèn)在這個(gè)地方執(zhí)行報(bào)錯(cuò)

fatalError("init(coder:) has

not been implemented")

//如果重新了init(frame方法但是還想要從xib中加載試圖,注釋上面一行代碼,調(diào)用下面一行代碼

//super.init(coder:

aDecoder)

}

關(guān)于對(duì)loadVIew的使用

//用戶是否登錄的標(biāo)記'

varuserLogin =false

//訪客視圖屬性

varvisitorLoginView:VisitorLoginView?

//loadView方法是蘋果專門為手寫代碼準(zhǔn)備的方法一旦實(shí)現(xiàn)了該方法xib/sb就會(huì)失效

//在loadView方法沒有調(diào)用super.loadView方法之前不能夠追蹤根視圖(view)會(huì)自動(dòng)檢測view是否為nil如果為nil會(huì)自動(dòng)調(diào)用loadView方法

//準(zhǔn)備視圖控制器的根視圖

//自定義根視圖就在這個(gè)方法中完成

//目標(biāo)是根據(jù)用戶是否登錄來顯示訪客視圖還是tableView

overridefuncloadView() {

ifuserLogin{

super.loadView()//加載tableview

}else{

//顯示自定義的訪客視圖引導(dǎo)用戶登錄或者注冊(cè)

visitorLoginView=VisitorLoginView()

//指定代理

visitorLoginView?.visitorLoginViewDelegate=self

//

v.backgroundColor = UIColor.purpleColor()

view=visitorLoginView

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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