Swift 初見(jiàn)

首先創(chuàng)建swift工程

創(chuàng)建界面

選中Command Line Tool, 點(diǎn)擊Next


語(yǔ)言欄選中Swift

接下來(lái)就創(chuàng)建完Swift工程了

知識(shí)點(diǎn):


第一部分 基本操作

1. let 表示常量? var 表示變量


2. 字符串的操作

創(chuàng)建一個(gè)字符串

let str = "Hello"

2. 1 計(jì)算字符串長(zhǎng)度(和OC類(lèi)似敷待,不過(guò)沒(méi)有了消息發(fā)送[], 全部使用? .? )

str.characters.count

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

2.2 字符串的大小寫(xiě)

print(str.uppercaseString)

print(str.lowercaseString)

2.3 字符串的拼接

第一種方法:

print("123\(str)4555")

第二種方法:

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

print(str2)

第三種方法

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

print(str3)

2.4 字符串的其他操作全部轉(zhuǎn)換為NSString再去操作

let str4:NSString = str2 as NSString


3. 數(shù)組 Array (和OC里面的數(shù)組可以相互轉(zhuǎn)換)

3.1? 不可變數(shù)組

// 不可變數(shù)組

let array1 = ["A", "2", "3", "4"]

// initWith/init在swift里面全部轉(zhuǎn)化成()

let array2 = [String]()

3.2 可變數(shù)組

3.2.1 創(chuàng)建可變數(shù)組

var mutableArray = [String]()

3.2.2 添加元素 使用append

mutableArray.append("Hello")

mutableArray.append("world")

3.2.3 Swift中打印使用 print()溯祸,并且所有代碼后面不需要加;

print(mutableArray)

3.2.4 數(shù)組移除元素

mutableArray.removeAtIndex(1)

3.3 數(shù)組遍歷

3.3.1

// 元素個(gè)數(shù).count

// 數(shù)組的遍歷 for-in(明確指出數(shù)組里元素的類(lèi)型)

for temp in array1 as [String]{

print(temp)

}

3.3.2

// 元組遍歷

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

{

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

}


4. 字典

4.1 不可變字典

4.1.1 創(chuàng)建字典

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

print(dict)

?4.1.2 通過(guò)key值訪(fǎng)問(wèn)value值 (和OC一樣)

print(dict["key2"])

4.2 可變字典

4.2.1 創(chuàng)建可變字典

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

4.2.3 (合并)

for (tempKey, tempValue) in dict{

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

dict3[tempKey] = tempValue

}

print(dict3)

4.3 字典遍歷

// for - in 遍歷

for (key, value) in dict

{

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

}

5. ? 與 ! 的作用與區(qū)別

// 如果一個(gè)值可能為nil桃犬,那么這個(gè)值就是可選類(lèi)型,用?標(biāo)識(shí)

// Optional包圍的就是一個(gè)可選類(lèi)型

// 可選類(lèi)型不能直接使用,必須強(qiáng)制解包 调榄!強(qiáng)制解包踊赠,對(duì)nil強(qiáng)制解包會(huì)造成Crash

常見(jiàn)的錯(cuò)誤:

// fatal error: unexpectedly found nil while unwrapping an Optional value? 對(duì)一個(gè)空的可選類(lèi)型進(jìn)行強(qiáng)制解包

舉例:

var a1:String?

a1 = "12345";

print(a1 ?? "234".characters.count)

// 如果a1為nil 賦值234? 如果有值 為a1原來(lái)的值

6. 條件語(yǔ)句

6.1 if 語(yǔ)句

6.1.1 if語(yǔ)句在Swift中和OC中的區(qū)別

// if 條件語(yǔ)句()可以省略 {}不能省略

// if 沒(méi)有非零即真的概念

6.1.2 舉例

let tempValue = 10

if tempValue > 5 {

print("tempValue > 5")

}

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

6.2.1? if-let 是對(duì)可選類(lèi)型的判斷,如果可選類(lèi)型為空每庆,則不執(zhí)行代碼塊臼疫,如果不為空則用tempStr來(lái)接受此刻這個(gè)可選類(lèi)型的解包后的值

let str:String? = "hello"

if let tempStr = str {

print(tempStr)

}

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

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

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

}

6.2.3? guard-let-else(守護(hù)) ? 如果可選類(lèi)型str為nil扣孟,則執(zhí)行code代碼塊,最后一定要return荣赶,如果不為nil則強(qiáng)制解包后的值賦值給tempStr凤价,這樣{}外面就可以使用tempStr

guard let tempStr = str else {

print("為nil")

return

}

6.3 switch

6.3.1 Swift 和 OC的區(qū)別

// switch 不局限判斷整形,可以使浮點(diǎn)型拔创,也可以是字符串利诺。。剩燥。

// switch 后面的小括號(hào)可以省略慢逾,大括號(hào)不能省略 case后面至少要有一條直行語(yǔ)句!C鸷臁侣滩!并且case后面的大括號(hào)可以省略,break可以不寫(xiě)变擒,不造成貫穿 default一定要寫(xiě)君珠,并且只能寫(xiě)在最后

6.3.2 舉例

let f = 3.2

switch f {

case 3.0:

print("===3.0")

case 3.1:

print("===3.1")

case 3.2:

print("===3.2")

default:

print("unknown")

}

7. 循環(huán)語(yǔ)句

7.1 第一種

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

print(i)

}

7.2 第二種

for i in 0 ..< 5 {

print(i)

}

8. 枚舉

8.1 注意點(diǎn)

// 枚舉(枚舉值可以關(guān)聯(lián)浮點(diǎn),字符串, 沒(méi)有默認(rèn)的關(guān)聯(lián)值)

// 關(guān)聯(lián)如果是Int娇斑,會(huì)默認(rèn)的遞增上去策添,如果不是Int,必須每個(gè)枚舉值都關(guān)聯(lián)上對(duì)應(yīng)的值

// 如果明確指出一個(gè)變量/常量是屬于那種枚舉類(lèi)型的話(huà)毫缆,可以直接用枚舉值賦值唯竹,否則就? 枚舉類(lèi)型.枚舉值

8.2 舉例

enum Month:Int {

case January

case February

case March

case April

}

let month:Month = .January

var month1 = Month.January

month1 = .February

8.3 在switch中的應(yīng)用

switch month{

case .January:

print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")

print(month)

case .February:

print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")

print(month)

case .March:

print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")

print(month)

case .April:

print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")

print(month)

}


第二部分 在iOS工程中的操作

創(chuàng)建步驟 1.


選中iOS下Application的Single View Application 點(diǎn)擊Next


選擇Swift語(yǔ)言 創(chuàng)建工程

知識(shí)點(diǎn):

1. 懶加載

1.1 格式

/*

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

code

return

}()

*/

1.2 使用

view.addSubview(btn)

1.2 實(shí)例

lazy var btn:UIButton = {

var temBtn = UIButton(type: .ContactAdd)

temBtn.frame = CGRectMake(90, 100, 50, 50)

temBtn.backgroundColor = UIColor.cyanColor()

return temBtn

}()


2. 閉包

2.1 格式

var 閉包變量 ={

(參數(shù)名:參數(shù)類(lèi)型)-> 返回值類(lèi)型 in

代碼塊

}

2.2 種類(lèi)

2.2.1 無(wú)參無(wú)返

let closure = {

() -> ()

in

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

}

closure()

2.2.2 有參無(wú)返

let closure1 = {

(tempStr1 str:String,tempStr2 str1:String) -> Void

in

print("有參無(wú)返\(str),\(str1)")

}

closure1(tempStr1 : "hello", tempStr2 : "world")

2.2.3 無(wú)參有返

let closure2 = {

() -> String

in

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

return "無(wú)參有返"

}

print(closure2())

2.2.4 有參有返

let closure1 = {

(tempStr1 str:String,tempStr2 str1:String) -> String

in

return tempStr2

}

print(closure1(tempStr1 : "hello", tempStr2 : "world"))

3. 函數(shù)

3.1 四種格式

func a () -> Void {

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

}

func b () -> String {

return "無(wú)參有返"

}

// 有參無(wú)返

func c (str : String) -> Void {

print("\(str)")

}

// 有參有返

func d (str : String) -> String {

return str

}

3.2 函數(shù) 和 閉包 的綜合使用

3.2.1 需求 : 輸入兩個(gè)字符串,輸入一個(gè)閉包(將剛才輸入的兩個(gè)字符串當(dāng)做參數(shù)苦丁,并且返回一個(gè)拼接好的新的字符串)

func combineString(str1:String, str2:String, closure:(tempStr1:String, tempStr2:String) -> String){

// 執(zhí)行閉包

let string = closure(tempStr1: str1, tempStr2: str2)

print(string)

}

3.2.2 使用:在viewDidLoad中調(diào)用

combineString("hello", str2: "world") { (tempStr1, tempStr2) -> String in

return "\(tempStr1) \(tempStr2)"

}

3.2.3 需求 :定義一個(gè)方法? (輸入?yún)?shù)color浸颓,frame,closure)(是將剛才的color芬骄,frame當(dāng)做參數(shù)猾愿,返回一個(gè)UIView),返回UIView

func createView(color:UIColor, frame:CGRect, closure:(tempColor:UIColor, tempFrame:CGRect) -> UIView) -> UIView {

let view = closure(tempColor: color, tempFrame: frame)

return view

}

3.2.4 使用

let view1:UIView = createView(UIColor.redColor(), frame: CGRectMake(0, 0, 375, 667)) { (tempColor, tempFrame) -> UIView in

let view = UIView()

view.backgroundColor = tempColor

view.frame = tempFrame

return view

}

view.addSubview(view1)

// swift里面不寫(xiě)self账阻,一般只有在閉包內(nèi)部才會(huì)強(qiáng)制要求寫(xiě)self

4. 異常捕獲

解析Json文件

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

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

do {

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

print(rootArray)

} catch {

// 異常捕獲 序列化出錯(cuò)自動(dòng)來(lái)這兒

print("error")

}

5. 字典錄入模型

5.1 創(chuàng)建模型

5.1.1 tips

// 字典轉(zhuǎn)模型蒂秘,模型中如果有基本數(shù)據(jù)類(lèi)型的話(huà),基本數(shù)據(jù)類(lèi)型不可以為可選類(lèi)型淘太,否則在KVC賦值中會(huì)找不到對(duì)應(yīng)的key值姻僧。如果為可選類(lèi)型的話(huà)應(yīng)該給初始值

5.1.2 創(chuàng)屬性

var name:String?

var age:Int = 0

var gender:String?

5.1.3 重載初始化方法

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

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

override init() {

super.init()

}

5.2 字典轉(zhuǎn)模型

let dict = ["name":"zhangsan","age":12,"gender":"男"]

let person = Person(dict: dict)

print(person.name)

print(person.age)

print(person.gender)

6. 單例的創(chuàng)建

6.1 創(chuàng)建

創(chuàng)屬性

var name:String?

6.1.1 第一種

/*

static var shareSingleDog:SingleDog = {

let instance = SingleDog()

return instance

}()

*/

6.1.2 第二種

static let instance = SingleDog()

static func shareSingleDog() -> SingleDog{

return instance

}

6.2 使用

6.2.1 第一種

let s1 = SingleDog.shareSingleDog

s1.name = "wangqiang"

let s2 = SingleDog.shareSingleDog.name

print(s2)

6.2.2 第二種

let s3 = SingleDog.shareSingleDog()

s3.name = "afbaf"

let s4 = SingleDog.shareSingleDog()

print(s4.name)



分享就到這里撇贺,謝謝大家的支持赌莺。。松嘶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艘狭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子翠订,更是在濱河造成了極大的恐慌巢音,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尽超,死亡現(xiàn)場(chǎng)離奇詭異官撼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)似谁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)傲绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人巩踏,你說(shuō)我怎么就攤上這事秃诵。” “怎么了蛀缝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵顷链,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屈梁,道長(zhǎng)嗤练,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任在讶,我火速辦了婚禮煞抬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘构哺。我一直安慰自己革答,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布曙强。 她就那樣靜靜地躺著残拐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碟嘴。 梳的紋絲不亂的頭發(fā)上溪食,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音娜扇,去河邊找鬼错沃。 笑死栅组,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枢析。 我是一名探鬼主播玉掸,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼醒叁!你這毒婦竟也來(lái)了司浪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤把沼,失蹤者是張志新(化名)和其女友劉穎断傲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體智政,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年箱蝠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了续捂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宦搬,死狀恐怖牙瓢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情间校,我是刑警寧澤矾克,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站憔足,受9級(jí)特大地震影響胁附,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滓彰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一控妻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揭绑,春花似錦弓候、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至邦蜜,卻和暖如春依鸥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畦徘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工毕籽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抬闯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓关筒,卻偏偏與公主長(zhǎng)得像溶握,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒸播,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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