首先創建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)
分享就到這里,謝謝大家的支持。。。