Swift項(xiàng)目開(kāi)發(fā):----swift知識(shí)點(diǎn)準(zhǔn)備(持續(xù)更新)

一惧辈、基礎(chǔ)的幾個(gè)知識(shí)點(diǎn)衡怀,很簡(jiǎn)單介牙,但是必須知道和掌握

1.常量和變量

var:變量修飾詞

let:常量修飾詞

2.字符串獲取長(zhǎng)度(兩種方法)

let str1 = "hello"

str.characters.count

let str2 = "hello"

str2.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

3.大小寫(xiě)轉(zhuǎn)換

轉(zhuǎn)大寫(xiě):str.uppercaseString

轉(zhuǎn)小寫(xiě):str.lowercaseString

4.判斷相等

直接用“==”來(lái)判斷

5.拼接

let str2 = String(format: "%02d:%02d", 1,2)

let str3 = String(format: "%02d-%02d", arguments: [1,2])

print(str2)

print(str3)

6.剪切字符串

str2.substringFromIndex(index: Index)

7.字符串其他操作轉(zhuǎn)化為NSString在去操作

let str4:NSString = str2 as NSString

8.數(shù)組相關(guān)知識(shí)

? ?8.1swift的數(shù)組可以和oc的數(shù)組轉(zhuǎn)換房待,在OC中init/ initWith在swift就是轉(zhuǎn)化為()來(lái)表示初始化

let array1 = ["a","b","c"]

let array2 = [String]()

8.2 數(shù)組個(gè)數(shù)

數(shù)組個(gè)數(shù).count

8.3 遍歷數(shù)組

?遍歷數(shù)組forin要明確的指出數(shù)組的類(lèi)型

for temp in array1 as [String] {

print(temp)

print(temp.characters.count)

}

?8.4 元組遍歷

//元組遍歷(能得到下標(biāo))

for(index, value) in array1.enumerate() {

print("index = \(index),value = \(value)")

}

8.5可變數(shù)組

初始化一個(gè)String類(lèi)型的數(shù)組: var mutableArray = [String]()

向數(shù)組添加元素:

mutableArray.append("hello")

mutableArray.append("world")

mutableArray.append("23")

print(mutableArray)

打印之后的結(jié)果:["hello","world","23"]

mutableArray.removeAll(keepCapacity: Bool)一出全部柬脸,是否保存原有的空間

mutableArray.removeFirst(n: Int)從哪個(gè)為第一個(gè)開(kāi)始刪除

9.字典

9.1 創(chuàng)建一個(gè)字典:

let dict = ["key1":"value1","key2":"value2","key3":"value3"]

print(dict)

print(dict["key1"])

9.2 遍歷字典forin

for(tempkey,tempvalue) in dict {

print("key = \(tempkey),value = \(tempvalue)")

//在swift中站位用\( )表示倔矾,括號(hào)內(nèi)填要輸出的參數(shù)

}

9.3 可變字典

var dict3 = ["key":"value"]

9.4 字典的合并

for(tempkey,tempvalue) in dict {

//如果存在則是一個(gè)更新鍵值對(duì)的操作妄均,否則就是一個(gè)增加鍵值對(duì)的操作

dict3[tempkey] = tempvalue

}

10.可選類(lèi)型

10.1?

? ? 如果一個(gè)值可能為nil柱锹,那么這個(gè)值就是可選類(lèi)型,用丰包?表示禁熏。同樣在打印后在輸出欄顯示時(shí)被optional包圍的就是可選類(lèi)型

10.2?

? ? 可選類(lèi)型不能直接使用,必須強(qiáng)制解包邑彪,!就是強(qiáng)制解包瞧毙。對(duì)nil強(qiáng)制解包會(huì)crash。當(dāng)在打印的輸出欄顯示 “unexpectedly found nil while unwrapping an Optional value”時(shí)寄症,就是對(duì)空的可選類(lèi)型強(qiáng)制解包出現(xiàn)的錯(cuò)誤

10.3 一個(gè)簡(jiǎn)單示例

var a1:String?

a1 = "12345"

print(a1!)

print(a1!.characters.count)

10.4 對(duì)可選類(lèi)型進(jìn)行判斷宙彪,若為空則給他一個(gè)默認(rèn)值

print(a1 ?? "234")

11 if語(yǔ)句

if語(yǔ)句和OC中不同的是()的條件語(yǔ)句可以省略。if沒(méi)有非零即真的概念有巧,只有true和false的概念

let temvalue = 10

if temvalue > 5 {

print("tempvalue >5")

}

14. 可選類(lèi)型的條件分支

letstr:String? ="hello"

(1) if-let對(duì)可選類(lèi)型的判斷释漆,若可選類(lèi)型為空,不執(zhí)行代碼塊篮迎,若果不為空灵汪,則用tempstr來(lái)接受此刻這個(gè)可選類(lèi)型解包后的值

if let tempStr = str {

print(tempStr)

}

(2)if-let-where跟if-let相似,where是對(duì)前面定義的這個(gè)局部變量在做一層判斷

if let tempStr = str where tempStr.characters.count>2{

print("tempStr.length =\(tempStr.characters.count)")

}

(3)guard-let-else(守護(hù))如果可選類(lèi)型為nil柑潦,則執(zhí)行code代碼塊享言,最后一定要return,如果不為nil則強(qiáng)制解包后的值賦給tempStr這樣在外面可以使用tempStr

guard let tempStr = str else {

return

}

tempStr

15 ?switch

在swift的switch中不局限整形渗鬼,可為浮點(diǎn)型览露,字符串型,

switch后面的小括號(hào)可以省略譬胎,大括號(hào)不能省略

case后面至少有一條執(zhí)行語(yǔ)句差牛,并且case后面的大括號(hào)可以省略,

break可以不寫(xiě)堰乔,不會(huì)造成貫穿偏化,default一定要寫(xiě),并且只能在最后寫(xiě)

let f =3.2

switch f {

case3.0:

print("===3.0")

case3.1:

print("===3.1")

case3.2:

print("3.2")

default:

print("unknown")

}

16 循環(huán)

下面的方法已經(jīng)被廢棄

for (var i = 0;i < 5;i++) {

}

正確的是

for var i = 0; i < 5; i++ {

print(i)

}

在左閉右開(kāi)區(qū)間[0,5)循環(huán)

for var i in 0..<5 {

print(i)

}

在閉區(qū)間[0,5]循環(huán)

for var i in 0...5 {

print(i)

}

17 枚舉(枚舉可以關(guān)聯(lián)任何類(lèi)型浮點(diǎn)镐侯,字符串侦讨,整型)

關(guān)聯(lián)若是int,會(huì)默認(rèn)遞增上去苟翻,若不是int必須每個(gè)枚舉值都關(guān)聯(lián)上值韵卤。

enumMonth:Float{

caseJanuary =1.1

caseFebruary =1.2

caseMarch =1.3

caseAppril =1.4

caseMay =1.5

caseJune =1.6

}

varmonth1:Month=Month.January

letmonth2 =Month.February

letmonth3:Month= .March

//如果已經(jīng)明確的指出一個(gè)變量是屬于那種類(lèi)型的枚舉的話(huà),可以直接給枚舉賦值

month1= .Appril

switchmonth1{

case.January:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

case.Appril:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

case.March:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

default:

print("unknown")

}

18 閉包

{

(參數(shù)名:參數(shù)類(lèi)型(多個(gè)參數(shù)逗號(hào)隔開(kāi)))->返回值類(lèi)型

in

code(自己寫(xiě)代碼)

}

19 函數(shù)

函數(shù)的寫(xiě)法:

func方法名(參數(shù)列表)->返回值類(lèi)型{

code

}

19.1 無(wú)參無(wú)返

let closure = {

()->()//()或者()->Void

in

print("無(wú)參無(wú)返")

19.2 有參有返

func add(a:Int)->Int {

return a+10

}

print(add(100))

19.3無(wú)參有返

func abb()->String {

return "無(wú)參有返"

}

print(abb())

19.4有參無(wú)返

func acc(a:Int)->Void {

print("有參無(wú)返")

}

print(acc(1))

20 輸入倆個(gè)字符串崇猫,輸入一個(gè)閉包(將輸入的兩個(gè)字符串拼接為一個(gè)字符串)

編寫(xiě)函數(shù):

func combineString(str1:String,str2:String,closure:(tempstr1:String,tempstr2:String)->String) {

//執(zhí)行閉包

letstring = closure(tempstr1: str1, tempstr2: str2)

print(string)

}

調(diào)用:

combineString("love", str2:"you") { (tempstr1, tempstr2) ->Stringin

return"\(tempstr1)\(tempstr2)"

}

21.OC中有的懶加載在swift中也有

寫(xiě)法:

lazy var變量名:變量類(lèi)型= {

code

return

}()

代碼:寫(xiě)懶加載一個(gè)不同

lazy var btn:UIButton= {

var tempBtn =UIButton(type:.ContactAdd)

tempBtn.frame=CGRectMake(90,200,50,50)

tempBtn.backgroundColor=UIColor.greenColor()

returntempBtn

}()

22.異常捕獲(很經(jīng)典)

在OC中我們解析文件或者網(wǎng)絡(luò)解析時(shí)當(dāng)解析的文件中有錯(cuò)時(shí)沈条,會(huì)crash,但是在swift中有了異常捕獲這個(gè)方法诅炉,會(huì)很容易的知道文件解析出錯(cuò)蜡歹,不用再看代碼半天找bug屋厘。

do{

let path =NSBundle.mainBundle().pathForResource("iOS", ofType:"json")

let data:NSData=NSData(contentsOfFile: path!)!

let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers) as! ?[[String:String]]

print(rootArray)

} catch {

//異常捕獲。序列化出錯(cuò)就會(huì)自動(dòng)來(lái)到這里

print("error")

}

23 字典轉(zhuǎn)模型

在KVC模式中月而。我們 會(huì)用到字典轉(zhuǎn)模型給model賦值擅这。一般的OC中寫(xiě)的方法是setValuesForKeyWithDictionary:的方法但是在swift中不是!下面就看看該怎么寫(xiě)景鼠。

在model文件中編寫(xiě):

var name:String?

var gender:String?

var age:Int=0//注意:字典轉(zhuǎn)模型中,模型中如果有基本的數(shù)據(jù)類(lèi)型的話(huà)痹扇,基本的數(shù)據(jù)類(lèi)型不可以給我可選類(lèi)型铛漓,否則在KVC賦值就會(huì)出現(xiàn)錯(cuò)誤找不到對(duì)應(yīng)的Key值。若為可選類(lèi)型該給初始值

//字典轉(zhuǎn)模型

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

如果自定義了初始化方法并且沒(méi)有實(shí)現(xiàn)系統(tǒng)默認(rèn)的初始化方法鲫构,那么外界訪(fǎng)問(wèn)不到該類(lèi)的默認(rèn)初始化方法浓恶,想要訪(fǎng)問(wèn)到就要手動(dòng)實(shí)現(xiàn)

剛寫(xiě)到KVC模式,就想到面試題里有的會(huì)問(wèn)的“KVC和KVO的區(qū)別”结笨,很搞笑包晰,這兩個(gè)壓根沒(méi)啥關(guān)系!(要非扯有關(guān)系炕吸,就得說(shuō):KVO建立在 KVC 之上)

KVC:Key Value Coding (鍵值編碼)通過(guò)字符串簡(jiǎn)介訪(fǎng)問(wèn)對(duì)象的屬性的方式?

KVO: Key Value Observing(觀(guān)察著模式) 通過(guò)字符串來(lái)監(jiān)聽(tīng)對(duì)象屬性的變化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伐憾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赫模,更是在濱河造成了極大的恐慌树肃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瀑罗,死亡現(xiàn)場(chǎng)離奇詭異胸嘴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)斩祭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)劣像,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摧玫,你說(shuō)我怎么就攤上這事耳奕。” “怎么了诬像?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵吮铭,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我颅停,道長(zhǎng)谓晌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任癞揉,我火速辦了婚禮纸肉,結(jié)果婚禮上溺欧,老公的妹妹穿的比我還像新娘。我一直安慰自己柏肪,他們只是感情好姐刁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著烦味,像睡著了一般聂使。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谬俄,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天柏靶,我揣著相機(jī)與錄音,去河邊找鬼溃论。 笑死屎蜓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钥勋。 我是一名探鬼主播炬转,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼算灸!你這毒婦竟也來(lái)了扼劈?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菲驴,失蹤者是張志新(化名)和其女友劉穎测僵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谢翎,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捍靠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了森逮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榨婆。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖褒侧,靈堂內(nèi)的尸體忽然破棺而出良风,到底是詐尸還是另有隱情,我是刑警寧澤闷供,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布烟央,位于F島的核電站,受9級(jí)特大地震影響歪脏,放射性物質(zhì)發(fā)生泄漏疑俭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一婿失、第九天 我趴在偏房一處隱蔽的房頂上張望钞艇。 院中可真熱鬧啄寡,春花似錦、人聲如沸哩照。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)飘弧。三九已至识藤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次伶,已是汗流浹背痴昧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留学少,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓秧骑,卻偏偏與公主長(zhǎng)得像版确,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乎折,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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