首先創(chuàng)建swift工程
選中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)
分享就到這里撇贺,謝謝大家的支持赌莺。。松嘶。