Swift 初見

首先創建swift工程

創建界面

選中Command Line Tool, 點擊Next


語言欄選中Swift

接下來就創建完Swift工程了

知識點:


第一部分 基本操作

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


2. 字符串的操作

創建一個字符串

let str = "Hello"

2. 1 計算字符串長度(和OC類似,不過沒有了消息發送[], 全部使用? .? )

str.characters.count

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

2.2 字符串的大小寫

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 字符串的其他操作全部轉換為NSString再去操作

let str4:NSString = str2 as NSString


3. 數組 Array (和OC里面的數組可以相互轉換)

3.1? 不可變數組

// 不可變數組

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

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

let array2 = [String]()

3.2 可變數組

3.2.1 創建可變數組

var mutableArray = [String]()

3.2.2 添加元素 使用append

mutableArray.append("Hello")

mutableArray.append("world")

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

print(mutableArray)

3.2.4 數組移除元素

mutableArray.removeAtIndex(1)

3.3 數組遍歷

3.3.1

// 元素個數.count

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

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 創建字典

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

print(dict)

?4.1.2 通過key值訪問value值 (和OC一樣)

print(dict["key2"])

4.2 可變字典

4.2.1 創建可變字典

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

4.2.3 (合并)

for (tempKey, tempValue) in dict{

// 如果key存在的則是一個更新鍵值對操作,不存在則是一個增加鍵值對操作

dict3[tempKey] = tempValue

}

print(dict3)

4.3 字典遍歷

// for - in 遍歷

for (key, value) in dict

{

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

}

5. ? 與 ! 的作用與區別

// 如果一個值可能為nil,那么這個值就是可選類型,用?標識

// Optional包圍的就是一個可選類型

// 可選類型不能直接使用,必須強制解包 !強制解包,對nil強制解包會造成Crash

常見的錯誤:

// fatal error: unexpectedly found nil while unwrapping an Optional value? 對一個空的可選類型進行強制解包

舉例:

var a1:String?

a1 = "12345";

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

// 如果a1為nil 賦值234? 如果有值 為a1原來的值

6. 條件語句

6.1 if 語句

6.1.1 if語句在Swift中和OC中的區別

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

// if 沒有非零即真的概念

6.1.2 舉例

let tempValue = 10

if tempValue > 5 {

print("tempValue > 5")

}

6.2 可選類型的條件分支

6.2.1? if-let 是對可選類型的判斷,如果可選類型為空,則不執行代碼塊,如果不為空則用tempStr來接受此刻這個可選類型的解包后的值

let str:String? = "hello"

if let tempStr = str {

print(tempStr)

}

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

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

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

}

6.2.3? guard-let-else(守護) ? 如果可選類型str為nil,則執行code代碼塊,最后一定要return,如果不為nil則強制解包后的值賦值給tempStr,這樣{}外面就可以使用tempStr

guard let tempStr = str else {

print("為nil")

return

}

6.3 switch

6.3.1 Swift 和 OC的區別

// switch 不局限判斷整形,可以使浮點型,也可以是字符串。。。

// switch 后面的小括號可以省略,大括號不能省略 case后面至少要有一條直行語句!?。〔⑶襝ase后面的大括號可以省略,break可以不寫,不造成貫穿 default一定要寫,并且只能寫在最后

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. 循環語句

7.1 第一種

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

print(i)

}

7.2 第二種

for i in 0 ..< 5 {

print(i)

}

8. 枚舉

8.1 注意點

// 枚舉(枚舉值可以關聯浮點,字符串, 沒有默認的關聯值)

// 關聯如果是Int,會默認的遞增上去,如果不是Int,必須每個枚舉值都關聯上對應的值

// 如果明確指出一個變量/常量是屬于那種枚舉類型的話,可以直接用枚舉值賦值,否則就? 枚舉類型.枚舉值

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中的應用

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工程中的操作

創建步驟 1.


選中iOS下Application的Single View Application 點擊Next


選擇Swift語言 創建工程

知識點:

1. 懶加載

1.1 格式

/*

lazy var 變量名:變量類型 = {

code

return

}()

*/

1.2 使用

view.addSubview(btn)

1.2 實例

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 閉包變量 ={

(參數名:參數類型)-> 返回值類型 in

代碼塊

}

2.2 種類

2.2.1 無參無返

let closure = {

() -> ()

in

print("無參無返")

}

closure()

2.2.2 有參無返

let closure1 = {

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

in

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

}

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

2.2.3 無參有返

let closure2 = {

() -> String

in

print("無參有返")

return "無參有返"

}

print(closure2())

2.2.4 有參有返

let closure1 = {

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

in

return tempStr2

}

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

3. 函數

3.1 四種格式

func a () -> Void {

print("無參無返")

}

func b () -> String {

return "無參有返"

}

// 有參無返

func c (str : String) -> Void {

print("\(str)")

}

// 有參有返

func d (str : String) -> String {

return str

}

3.2 函數 和 閉包 的綜合使用

3.2.1 需求 : 輸入兩個字符串,輸入一個閉包(將剛才輸入的兩個字符串當做參數,并且返回一個拼接好的新的字符串)

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

// 執行閉包

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

print(string)

}

3.2.2 使用:在viewDidLoad中調用

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

return "\(tempStr1) \(tempStr2)"

}

3.2.3 需求 :定義一個方法? (輸入參數color,frame,closure)(是將剛才的color,frame當做參數,返回一個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里面不寫self,一般只有在閉包內部才會強制要求寫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 {

// 異常捕獲 序列化出錯自動來這兒

print("error")

}

5. 字典錄入模型

5.1 創建模型

5.1.1 tips

// 字典轉模型,模型中如果有基本數據類型的話,基本數據類型不可以為可選類型,否則在KVC賦值中會找不到對應的key值。如果為可選類型的話應該給初始值

5.1.2 創屬性

var name:String?

var age:Int = 0

var gender:String?

5.1.3 重載初始化方法

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

5.1.4? 如果自定義了初始化方法并且沒有實現系統默認的初始化方法,那么外界訪問不到該類的默認初始化方法,想要訪問的話必須手動實現

override init() {

super.init()

}

5.2 字典轉模型

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

let person = Person(dict: dict)

print(person.name)

print(person.age)

print(person.gender)

6. 單例的創建

6.1 創建

創屬性

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)



分享就到這里,謝謝大家的支持。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容