swift第一周實訓(xùn)心得

2016年11月18日 星期五 晚

11月的集寧芍锚,相對于來大學(xué)的以往兩年反倒給人一些暖意砂客,但畢竟是晚上花椭,天氣預(yù)報的降溫也漸漸的若隱若現(xiàn)了,集寧的冬天終于要來了疲陕。想想大三正在經(jīng)歷過的集寧方淤,突然覺得有些懷念,暖暖的集寧竟給人一絲可愛的留念的味道蹄殃,貌似之前寒風(fēng)刺骨的感覺沒有那么的強(qiáng)烈携茂,那么的“可怕”了。每次從教室到食堂再到宿舍的三點一線途中诅岩,總有種被集寧的大風(fēng)吹成“傻狗”的感覺讳苦,然而今年,卻對她的看法發(fā)生了改變吩谦。我想鸳谜,我是愛她的,而她式廷,也是愛我們的咐扭。

現(xiàn)在的我正坐在電腦前寫著我的swift實訓(xùn)心得。想想滑废,這是大三第一學(xué)期第一次實訓(xùn)的第5天蝗肪,準(zhǔn)確來說是第4天,因為第1天的時候蠕趁,學(xué)校和藍(lán)鷗進(jìn)行了“共建專業(yè)開班典禮”薛闪,作為藍(lán)鷗派來的老師,鋒哥大概的給我們介紹了關(guān)于他們公司的一些內(nèi)容以及現(xiàn)在各個語言的發(fā)展情況等妻导,所以實訓(xùn)是從周二才開始的。隨著這五天的相處怀各,感覺鋒哥講課比較快倔韭,同學(xué)們很多有些跟不上,而且原來學(xué)的也都忘的差不多了瓢对,后來才知道鋒哥在他公司是直接帶人做項目的寿酌,所以光講重點的部分,自然講的也快硕蛹。雖然鋒哥講課快醇疼,但說實話其實鋒哥是個很牛X的人,上課帶我們打代碼也很快法焰,講各個重要的知識點秧荆,控件的屬性、方法時也都特別仔細(xì)埃仪,概念大家不懂的時候他也會舉通俗的??乙濒,盡量讓大家聽懂,還讓我們下一些與專業(yè)方面相關(guān)的APP、網(wǎng)頁那些讓我們課下自己進(jìn)行學(xué)習(xí)颁股,感覺他很盡責(zé)么库,也很努力的讓我們多去學(xué)一些東西。話不多說甘有,給峰哥個6诉儒,希望他能一直陪著我們學(xué)習(xí)。

這次實訓(xùn)主要是以swift3.0相關(guān)的內(nèi)容展開的亏掀,雖然大二的時候?qū)wift課程進(jìn)行過簡單忱反、系統(tǒng)性的學(xué)習(xí),但當(dāng)時我們所學(xué)習(xí)的是swift2.0的內(nèi)容幌氮,還有一點:大家經(jīng)過一年的其他科目的學(xué)習(xí)缭受,對swift的基本語法已經(jīng)模糊了,更何況是改進(jìn)過的新內(nèi)容该互。所以這次的實訓(xùn)可謂是又從零開始的學(xué)習(xí)米者。但相比之前,同學(xué)們的積極性也有所提高宇智,每個人都有想學(xué)習(xí)的欲望蔓搞,并且都希望可以學(xué)會。而且這次的實訓(xùn)較之前的時間較長随橘,完全可以從什么都不會開始學(xué)習(xí)喂分,課下也有好多時間可以進(jìn)行練習(xí),對代碼進(jìn)行學(xué)習(xí)記憶机蔗,總之課程的安排相對還是比較合理的蒲祈。

下面,我就對近幾天實訓(xùn)的內(nèi)容進(jìn)行總結(jié)萝嘁,其中包括一些重點梆掸,非重點,如果內(nèi)容不夠嚴(yán)密牙言、不夠好酸钦,希望不要噴。

day01

定義常量咱枉、變量

//自動類型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"

基本數(shù)據(jù)類型

  • 字符卑硫、整型、浮點型蚕断、雙精度浮點型
//數(shù)據(jù)類型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點型
let height : Float = 12.2
//4??雙精度浮點型
let height1 : Double = 12.222
  • 字符串
//5??字符串
let name1 : String = "Lanou"
//長度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個字符*/

//遍歷
for item in name3.characters {
    
}
//切割
var school = "Jiningshifan"
let index1 = school.index(school.startIndex, offsetBy:2)
let newSchool = school.substring(to: index1)
print(newSchool)
  • 數(shù)組
//6??數(shù)組
//array
var arr = [1,2,3]
var arr1 : [Int] = [Int]()
//遍歷
for (index, item) in arr.enumerated(){
    print(item)
}
//增加元素
arr1.append(2)
//刪除元素
let a = arr1.remove(at: 0)
//更新元素(把第二個元素?fù)Q成22)
arr[1] = 22
print(arr)
//練習(xí)題
var names = ["zhang", "li", "wang", "zhao"]
//index 索引 item 獲取的值
for(index,item) in names.enumerated(){
    print("index = \(index), item = \(item)")
    print("index = \\(), item = \(item)")//"\"轉(zhuǎn)義字符
}
for i in 1...10 {
    print(i)
}
  • 字典
//7??字典
var dic : [Int: Int] = [1:1, 2:2]
var dic1 : [Int : Int] = [Int : Int]() //空字典
//添加 更新
dic[1] = 2 //更新
dic[3] = 3 //添加
//刪除
dic.removeValue(forKey: 1)
print(dic)
//遍歷
for item in dic.keys {
    print(dic[item]!)
}
  • Range
//Range
let student = "yang"
let startIndex = student.index(student.startIndex, offsetBy: 2)
let endIndex = student.index(student.endIndex, offsetBy: -2)
let range = startIndex..<endIndex
student.substring(with: range)

冒泡法

//冒泡(排序算法)
var arr = [2,45,16,8,20]
for i in 0..<arr.count - 1 {  //循環(huán)多少輪
    for j in 0..<(arr.count - i - 1) {  //比較多少次
        //比較換位置
        if (arr[j] > arr[j+1]) {
            var temp = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
        }
    }
}
print(arr)

二叉樹的層級遍歷

//二叉樹的層級遍歷
class Node : NSObject {
    var data : Int!
    var leftChild : Node?
    var rightChild : Node?
}

var node1 : Node = Node()
node1.data = 4

var node2 : Node = Node()
node2.data = 5

var node3 : Node = Node()
node3.data = 6

var node4 : Node = Node()
node4.data = 7

var node5 : Node = Node()
node5.data = 2
node5.leftChild = node1
node5.rightChild = node2

var node6 : Node = Node()
node6.data = 3
node6.leftChild = node3
node6.rightChild = node4

//根節(jié)點
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6

func readData(node : Node){
    var arr = [Node]()  //定義數(shù)組
    arr.append(node)  //根節(jié)點裝進(jìn)數(shù)組
    while arr.count > 0 {
        let temp = arr[0]
        if let _ = temp.leftChild {   //可選綁定
            arr.append(temp.leftChild!)  //左孩子裝進(jìn)數(shù)組
        }
        if let _ = temp.rightChild {
            arr.append(temp.rightChild!)
        }
        //先打印再刪除
        print(temp.data)
        arr.remove(at: 0)  //讀取完第一個元素的時候刪除
    }
}
readData(node: node7)

函數(shù)

//函數(shù)
//1?? 無參數(shù)無返回值
func fun1() {
    print("無參數(shù)無返回值")
}
fun1()

//2?? 無參數(shù)有返回值
func fun2() -> Int{
    print("無參數(shù)有返回值")
    return 0
}

//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
    print("有參數(shù)有返回值")
    return 0
}

//4?? 有參數(shù)無返回值
func func4(parm: Int) {
    print("有參數(shù)無返回值")
}

//5?? 不定參數(shù)
func func5 (parm : Int...) {
    var result : Int = 0
    for i in parm {
        result+=i
    }
    print(result)
}

//連加
func5(parm: 1,2,3,4)

//inout相當(dāng)于指針
func func6 (a :inout Int, b :inout Int) {
    let temp = a
    a = b
    b = temp
}

var a = 10
var b = 20
func6(a: &a, b: &b)
print("a = \(a) b = \(b)")

day02

重寫父類(并進(jìn)行初始化)

class Student : NSObject {
    var name : String?
    var age : Int?
    var gender : Bool?
    
    //override重寫父類
    override init() {  //初始化方法
        print("創(chuàng)造了一個學(xué)生對象")
    }
    init(age : Int, gender : Bool, name : String) {
        super.init()
        self.age = age
        self.gender = gender
        self.name = name
    }
  
    //析構(gòu)函數(shù)(放到類里邊)
    deinit {
        print("對象釋放")
    }
 }
    
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name)   age = \(stu.age)   gender = \(stu.gender)")

類與結(jié)構(gòu)體的區(qū)別

//類
class Person : NSObject {
    //存儲屬性
    var name : String?
    var age : Int?
    //計算屬性
    var fathersAge : Int {
        set {
            //newValue是默認(rèn)值
            self.age = newValue - 20
        }
        get {
            return self.age! + 20
        }
    }
    //lazy屬性
    lazy var st : Student = Student()
    
    //函數(shù)
    //方法調(diào)用
    func eat() {
        print("吃飯")
    }
    //類名調(diào)用(類函數(shù))
    class func happy() {
        print("happy")
    }
    //靜態(tài)不可繼承
    static func study() {
        print("學(xué)習(xí)")
    }
    //類屬性
    static var fatherName : String?
    
}

var p : Person = Person()
print(p.st)
  • 結(jié)構(gòu)體
//結(jié)構(gòu)體  
//1.結(jié)構(gòu)體不能繼承
//2.結(jié)構(gòu)體是值類型,類是引用類型
struct Dog {
    var name : String?
}

var dog : Dog = Dog()
p.name = "zhangsan"
dog.name = "wangcai"
var p1 = p
var dog1 = dog

p1.name = "lisi"
dog1.name = "dahuang"

print("p.name = \(p.name)  dog.name = \(dog.name)")

枚舉

//枚舉
enum Season : String {
    case Spring = "春天"
    case Summer = "夏天"
    case Autumn = "秋天"
    case Winter = "冬天"
    //case a,b,c
}

print(Season.Autumn.rawValue)

let season = Season.Spring
//遍歷
//switch .. case 必須包含所有的情況,否則使用default
switch season {
  case .Spring :
    print("1")
    fallthrough //貫穿(??)
  case .Summer :
    print("2")
  case .Autumn :
    print("3")
  case .Winter :
    print("4")
}

let a = 10
switch a {
  case 1...20 :
    print("包含10")
  case 2...30 :
    print("包含10")
  default:
    print("")
}

協(xié)議

//協(xié)議
//定義一個協(xié)議
protocol PersonProtocol {
    func study()
}

//可選協(xié)議
@objc protocol StudentProtocol {
    @objc optional func happy()
    var name : String{set get}
}

class Person: NSObject, StudentProtocol, PersonProtocol {
    var newName : String?
    var name : String {
        set{
            self.newName = newValue
        }
        get{
            return self.newName!
        }
    }
    func study() {
        
    }
}

var p : Person = Person()
p.study()
p.name = "zhangsan"
print("p.name = \(p.name)")
  • 練習(xí)題(1)
//練習(xí)題
//求圖形的面積及周長(用協(xié)議)
//面向協(xié)議編程(面向?qū)ο蟮囊环N)
protocol Shape {
    func Area() -> Float
    func Perimeter() -> Float
}

//三角形
class Triangle : NSObject, Shape {
    var height : Float!
    var long : Float!
    func Area() -> Float {
        return height * long / 2.0
    }
    func Perimeter() -> Float {
        return long * 3
    }
}

//正方形
class Square : NSObject, Shape {
    var length : Float!
    func Area() -> Float {
        return length * length
    }
    func Perimeter() -> Float {
        return length * 4
    }
}

///圓形
class Circle : NSObject, Shape {
    var radius : Float!
    func Area() -> Float {
        return radius * radius * 3.14
    }
    func Perimeter() -> Float {
        return 3.14 * 2 * radius
    }
}

var triangle : Triangle = Triangle()
triangle.height = 2.5
triangle.long = 3.0
print("長方形的面積長為:",triangle.Area())
print("長方形的周長為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長為:",square.Area())
print("正方形的周長為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長為:",circle.Area())
print("圓形的周長為:",circle.Perimeter())
  • 練習(xí)題(2)
protocol GirlProtocol {
    func payTheBill()
    func happy()
}
//delegate
class Girl : NSObject {
    //保存代理值
    var delegate : GirlProtocol?
    //
    func shopBigin() {
        if let _ = delegate {
            delegate?.happy()
        }
    }
    //購物完畢
    func shopOver() {
        if let _ = delegate {
            self.delegate?.payTheBill()
        }
    }
}

class Boy : NSObject, GirlProtocol {
    func payTheBill() {
        //實現(xiàn)協(xié)議
        print("買單")
    }
    func happy() {
        print("??")
    }
    //打游戲
    func playGames() {
        print("打游戲")
    }
}

let boy : Boy = Boy()
let girl : Girl = Girl()
girl.delegate = boy
girl.shopOver()
girl.shopBigin()
  • 練習(xí)題(3)
//協(xié)議
protocol FileProtocol {
    //開始
    func Start()
    //下載過程中
    func downProcess()
    //結(jié)束
    func End()
    //發(fā)生錯誤
    func Error()
}

//文件類
class File : NSObject {
    //保存代理值
    var delegate1 : FileProtocol?
    //文件管理
    func fileManage() {
        //開始
        if let _ = delegate1 {
            delegate1?.Start()
        }
        //下載過程中
        if let _ = delegate1 {
            delegate1?.downProcess()
        }
        //結(jié)束
        if let _ = delegate1 {
            delegate1?.End()
        }
        //發(fā)生錯誤
        if let _ = delegate1 {
            delegate1?.Error()
        }
    }
}

//處理文件類
class handleFile : NSObject, FileProtocol {
    //把四種狀態(tài)傳過來
    //開始
    func Start() {
        print("開始")
    }
    //下載過程中
    func downProcess() {
        print("下載過程中")
    }
    //結(jié)束
    func End() {
        print("結(jié)束")
    }
    //發(fā)生錯誤
    func Error() {
        print("發(fā)生錯誤")
    }
}

let file : File = File()
let handlefile : handleFile = handleFile()
file.delegate1 = handlefile
file.fileManage()

day03

泛型

//泛型
//打印數(shù)字 打印字符串 打印字符
func myPrintNumber(parm:Int) {
    print(parm)
}

func myPrintString(parm:String) {
    print(parm)
}

func myPrintCharacter(parm:Character) {
    print(parm)
}

//泛型只寫一個
func myPrint<T:Collection>(parm:T) {
    print(parm)
}

let a = [1,2,3]
myPrint(parm: a)

冒泡排序法

func sort(num : Int, num1 : Int) -> Bool {
    //if num >num1 true 否則 false
    return num > num1 ? true : false
}
//定義一個變量 把sort賦值給變量
let fun : (Int,Int) -> Bool = sort
//使用變量調(diào)用函數(shù)
let result = fun(1,2)
print(result)

//冒泡排序法
var arr = [1,3,6,9,12]
func sortArr(parm:(Int,Int) -> Bool) {
    for i in 0..<arr.count - 1 {
        for j in 0..<arr.count - 1 - i {
            if (parm(arr[j], arr[j+1])) {
              let temp = arr[j]
              arr[j] = arr[j+1]
              arr[j+1] = temp
            }
        }
    }
}
sortArr(parm: sort)
print(arr)

func sort1(num: Int, num1: Int) -> Bool {
    return num < num1 ? true : false
}

//調(diào)用
sortArr(parm: sort1)
print(arr)

閉包

//閉包
let block = { (a : Int, b : Int) -> Bool in
    return a > b ? true : false
}

sortArr(parm: block)

let upSort : (Int, Int) -> Bool = {
    return $0 > $1
}

let downSort : (Int, Int) -> Bool = {
    return $0 < $1
}

sortArr(parm: upSort)
sortArr(parm: downSort)
print(arr)

day04

UIView

  • 在ViewController.swift中super.viewDidLoad()下鍵入:
//獲取當(dāng)前控制器view,設(shè)置背景顏色為紅色
        //self.view.backgroundColor = UIColor.red
        
        //初始化
        let rect = CGRect(x: 30, y: 30, width: 100, height: 200)
        let subView : UIView = UIView(frame: rect)
        //添加到父視圖上
        subView.backgroundColor = UIColor.red
        self.view.addSubview(subView)
        
        let subView1 = UIView()
        subView1.frame = CGRect(x: 140, y: 140, width: 100, height: 100)
        subView1.backgroundColor = UIColor.blue
        self.view.addSubview(subView1)
        
        let subView2 = UIView()
        subView2.frame = CGRect(x: 40, y: 40, width: 30, height: 30)
        subView2.backgroundColor = UIColor.green
        subView.addSubview(subView2)
        //frame 相對于父視圖的
        
        //bounds 相對于自身的坐標(biāo)
        print(subView1.bounds)
        
        
        //center
        let subView3 = UIView()
        self.view.addSubview(subView3)
        subView3.frame = CGRect(origin: self.view.center, size: CGSize(width: 100, height: 100))
        subView3.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
        
        //透明度
        //subView3.alpha = 0.1 //這種會影響子視圖
        subView3.backgroundColor = UIColor(colorLiteralRed: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)  //三原色修改透明度
        let subView4 = UIView(frame: CGRect(x: 10, y: 10, width: 40, height: 40))
        subView4.backgroundColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
        subView3.addSubview(subView4)
        
        //tag 使用2000以上的
        subView4.tag = 10001 //10000以上
        //subView4.isHidden = true //隱藏
        let tagView = subView3.viewWithTag(10001)
        print("subView4 = \(subView4),Tag = \(tagView)")
        
        //用戶交互??
        //self.view.isUserInteractionEnabled = false
        //self.view.isUserInteractionEnabled = true  //打開
        
        //superView
        print("superView = \(subView4.superview),subView3 = \(subView3)")
        
        //子視圖
        for item in self.view.subviews {
            //從父視圖上移除
            item.removeFromSuperview()
        }
//程序啟動
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //初始化window
        let frame = UIScreen.main.bounds
        self.window = UIWindow(frame: frame)
        
        //初始化控制器
        let myVC = MyViewController()
        
        //設(shè)置成window的根視圖控制器
        self.window?.rootViewController = myVC
        
        //把window設(shè)置成系統(tǒng)的主window
        self.window?.makeKeyAndVisible()
        
        return true
}
  • 在ViewController類中鍵入:

//開始點擊
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("點擊了當(dāng)前的控制器")
    }
  • command+n新建一個Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;

  • 在AppDelegate.swift中AppDelegate類中鍵入:


//程序啟動
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //初始化window
        let frame = UIScreen.main.bounds
        self.window = UIWindow(frame: frame)
        
        //初始化控制器
        let myVC = MyViewController()
        
        //設(shè)置成window的根視圖控制器
        self.window?.rootViewController = myVC
        
        //把window設(shè)置成系統(tǒng)的主window
        self.window?.makeKeyAndVisible()
        
        return true
    }
  • 在MyViewController.swift中viewDidLoad()事件下鍵入:
    self.view.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
  • 運行結(jié)果:

day01

定義常量欢伏、變量

//自動類型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"

基本數(shù)據(jù)類型

  • 字符、整型亿乳、浮點型颜懊、雙精度浮點型
//數(shù)據(jù)類型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點型
let height : Float = 12.2
//4??雙精度浮點型
let height1 : Double = 12.222
  • 字符串
//5??字符串
let name1 : String = "Lanou"
//長度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個字符*/

//遍歷
for item in name3.characters {
    
}
//切割
var school = "Jiningshifan"
let index1 = school.index(school.startIndex, offsetBy:2)
let newSchool = school.substring(to: index1)
print(newSchool)
  • 數(shù)組
//6??數(shù)組
//array
var arr = [1,2,3]
var arr1 : [Int] = [Int]()
//遍歷
for (index, item) in arr.enumerated(){
    print(item)
}
//增加元素
arr1.append(2)
//刪除元素
let a = arr1.remove(at: 0)
//更新元素(把第二個元素?fù)Q成22)
arr[1] = 22
print(arr)
//練習(xí)題
var names = ["zhang", "li", "wang", "zhao"]
//index 索引 item 獲取的值
for(index,item) in names.enumerated(){
    print("index = \(index), item = \(item)")
    print("index = \\(), item = \(item)")//"\"轉(zhuǎn)義字符
}
for i in 1...10 {
    print(i)
}
  • 字典
//7??字典
var dic : [Int: Int] = [1:1, 2:2]
var dic1 : [Int : Int] = [Int : Int]() //空字典
//添加 更新
dic[1] = 2 //更新
dic[3] = 3 //添加
//刪除
dic.removeValue(forKey: 1)
print(dic)
//遍歷
for item in dic.keys {
    print(dic[item]!)
}
  • Range
//Range
let student = "yang"
let startIndex = student.index(student.startIndex, offsetBy: 2)
let endIndex = student.index(student.endIndex, offsetBy: -2)
let range = startIndex..<endIndex
student.substring(with: range)

冒泡法

//冒泡(排序算法)
var arr = [2,45,16,8,20]
for i in 0..<arr.count - 1 {  //循環(huán)多少輪
    for j in 0..<(arr.count - i - 1) {  //比較多少次
        //比較換位置
        if (arr[j] > arr[j+1]) {
            var temp = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
        }
    }
}
print(arr)

二叉樹的層級遍歷

//二叉樹的層級遍歷
class Node : NSObject {
    var data : Int!
    var leftChild : Node?
    var rightChild : Node?
}

var node1 : Node = Node()
node1.data = 4

var node2 : Node = Node()
node2.data = 5

var node3 : Node = Node()
node3.data = 6

var node4 : Node = Node()
node4.data = 7

var node5 : Node = Node()
node5.data = 2
node5.leftChild = node1
node5.rightChild = node2

var node6 : Node = Node()
node6.data = 3
node6.leftChild = node3
node6.rightChild = node4

//根節(jié)點
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6

func readData(node : Node){
    var arr = [Node]()  //定義數(shù)組
    arr.append(node)  //根節(jié)點裝進(jìn)數(shù)組
    while arr.count > 0 {
        let temp = arr[0]
        if let _ = temp.leftChild {   //可選綁定
            arr.append(temp.leftChild!)  //左孩子裝進(jìn)數(shù)組
        }
        if let _ = temp.rightChild {
            arr.append(temp.rightChild!)
        }
        //先打印再刪除
        print(temp.data)
        arr.remove(at: 0)  //讀取完第一個元素的時候刪除
    }
}
readData(node: node7)

函數(shù)

//函數(shù)
//1?? 無參數(shù)無返回值
func fun1() {
    print("無參數(shù)無返回值")
}
fun1()

//2?? 無參數(shù)有返回值
func fun2() -> Int{
    print("無參數(shù)有返回值")
    return 0
}

//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
    print("有參數(shù)有返回值")
    return 0
}

//4?? 有參數(shù)無返回值
func func4(parm: Int) {
    print("有參數(shù)無返回值")
}

//5?? 不定參數(shù)
func func5 (parm : Int...) {
    var result : Int = 0
    for i in parm {
        result+=i
    }
    print(result)
}

//連加
func5(parm: 1,2,3,4)

//inout相當(dāng)于指針
func func6 (a :inout Int, b :inout Int) {
    let temp = a
    a = b
    b = temp
}

var a = 10
var b = 20
func6(a: &a, b: &b)
print("a = \(a) b = \(b)")

day02

重寫父類(并進(jìn)行初始化)

class Student : NSObject {
    var name : String?
    var age : Int?
    var gender : Bool?
    
    //override重寫父類
    override init() {  //初始化方法
        print("創(chuàng)造了一個學(xué)生對象")
    }
    init(age : Int, gender : Bool, name : String) {
        super.init()
        self.age = age
        self.gender = gender
        self.name = name
    }
  
    //析構(gòu)函數(shù)(放到類里邊)
    deinit {
        print("對象釋放")
    }
 }
    
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name)   age = \(stu.age)   gender = \(stu.gender)")

類與結(jié)構(gòu)體的區(qū)別

//類
class Person : NSObject {
    //存儲屬性
    var name : String?
    var age : Int?
    //計算屬性
    var fathersAge : Int {
        set {
            //newValue是默認(rèn)值
            self.age = newValue - 20
        }
        get {
            return self.age! + 20
        }
    }
    //lazy屬性
    lazy var st : Student = Student()
    
    //函數(shù)
    //方法調(diào)用
    func eat() {
        print("吃飯")
    }
    //類名調(diào)用(類函數(shù))
    class func happy() {
        print("happy")
    }
    //靜態(tài)不可繼承
    static func study() {
        print("學(xué)習(xí)")
    }
    //類屬性
    static var fatherName : String?
    
}

var p : Person = Person()
print(p.st)
  • 結(jié)構(gòu)體
//結(jié)構(gòu)體  
//1.結(jié)構(gòu)體不能繼承
//2.結(jié)構(gòu)體是值類型,類是引用類型
struct Dog {
    var name : String?
}

var dog : Dog = Dog()
p.name = "zhangsan"
dog.name = "wangcai"
var p1 = p
var dog1 = dog

p1.name = "lisi"
dog1.name = "dahuang"

print("p.name = \(p.name)  dog.name = \(dog.name)")

枚舉

//枚舉
enum Season : String {
    case Spring = "春天"
    case Summer = "夏天"
    case Autumn = "秋天"
    case Winter = "冬天"
    //case a,b,c
}

print(Season.Autumn.rawValue)

let season = Season.Spring
//遍歷
//switch .. case 必須包含所有的情況,否則使用default
switch season {
  case .Spring :
    print("1")
    fallthrough //貫穿(??)
  case .Summer :
    print("2")
  case .Autumn :
    print("3")
  case .Winter :
    print("4")
}

let a = 10
switch a {
  case 1...20 :
    print("包含10")
  case 2...30 :
    print("包含10")
  default:
    print("")
}

協(xié)議

//協(xié)議
//定義一個協(xié)議
protocol PersonProtocol {
    func study()
}

//可選協(xié)議
@objc protocol StudentProtocol {
    @objc optional func happy()
    var name : String{set get}
}

class Person: NSObject, StudentProtocol, PersonProtocol {
    var newName : String?
    var name : String {
        set{
            self.newName = newValue
        }
        get{
            return self.newName!
        }
    }
    func study() {
        
    }
}

var p : Person = Person()
p.study()
p.name = "zhangsan"
print("p.name = \(p.name)")
  • 練習(xí)題(1)
//練習(xí)題
//求圖形的面積及周長(用協(xié)議)
//面向協(xié)議編程(面向?qū)ο蟮囊环N)
protocol Shape {
    func Area() -> Float
    func Perimeter() -> Float
}

//三角形
class Triangle : NSObject, Shape {
    var height : Float!
    var long : Float!
    func Area() -> Float {
        return height * long / 2.0
    }
    func Perimeter() -> Float {
        return long * 3
    }
}

//正方形
class Square : NSObject, Shape {
    var length : Float!
    func Area() -> Float {
        return length * length
    }
    func Perimeter() -> Float {
        return length * 4
    }
}

///圓形
class Circle : NSObject, Shape {
    var radius : Float!
    func Area() -> Float {
        return radius * radius * 3.14
    }
    func Perimeter() -> Float {
        return 3.14 * 2 * radius
    }
}

var triangle : Triangle = Triangle()
triangle.height = 2.5
triangle.long = 3.0
print("長方形的面積長為:",triangle.Area())
print("長方形的周長為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長為:",square.Area())
print("正方形的周長為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長為:",circle.Area())
print("圓形的周長為:",circle.Perimeter())
  • 練習(xí)題(2)
protocol GirlProtocol {
    func payTheBill()
    func happy()
}
//delegate
class Girl : NSObject {
    //保存代理值
    var delegate : GirlProtocol?
    //
    func shopBigin() {
        if let _ = delegate {
            delegate?.happy()
        }
    }
    //購物完畢
    func shopOver() {
        if let _ = delegate {
            self.delegate?.payTheBill()
        }
    }
}

class Boy : NSObject, GirlProtocol {
    func payTheBill() {
        //實現(xiàn)協(xié)議
        print("買單")
    }
    func happy() {
        print("??")
    }
    //打游戲
    func playGames() {
        print("打游戲")
    }
}

let boy : Boy = Boy()
let girl : Girl = Girl()
girl.delegate = boy
girl.shopOver()
girl.shopBigin()
  • 練習(xí)題(3)
//協(xié)議
protocol FileProtocol {
    //開始
    func Start()
    //下載過程中
    func downProcess()
    //結(jié)束
    func End()
    //發(fā)生錯誤
    func Error()
}

//文件類
class File : NSObject {
    //保存代理值
    var delegate1 : FileProtocol?
    //文件管理
    func fileManage() {
        //開始
        if let _ = delegate1 {
            delegate1?.Start()
        }
        //下載過程中
        if let _ = delegate1 {
            delegate1?.downProcess()
        }
        //結(jié)束
        if let _ = delegate1 {
            delegate1?.End()
        }
        //發(fā)生錯誤
        if let _ = delegate1 {
            delegate1?.Error()
        }
    }
}

//處理文件類
class handleFile : NSObject, FileProtocol {
    //把四種狀態(tài)傳過來
    //開始
    func Start() {
        print("開始")
    }
    //下載過程中
    func downProcess() {
        print("下載過程中")
    }
    //結(jié)束
    func End() {
        print("結(jié)束")
    }
    //發(fā)生錯誤
    func Error() {
        print("發(fā)生錯誤")
    }
}

let file : File = File()
let handlefile : handleFile = handleFile()
file.delegate1 = handlefile
file.fileManage()

day03

泛型

//泛型
//打印數(shù)字 打印字符串 打印字符
func myPrintNumber(parm:Int) {
    print(parm)
}

func myPrintString(parm:String) {
    print(parm)
}

func myPrintCharacter(parm:Character) {
    print(parm)
}

//泛型只寫一個
func myPrint<T:Collection>(parm:T) {
    print(parm)
}

let a = [1,2,3]
myPrint(parm: a)

冒泡排序法

func sort(num : Int, num1 : Int) -> Bool {
    //if num >num1 true 否則 false
    return num > num1 ? true : false
}
//定義一個變量 把sort賦值給變量
let fun : (Int,Int) -> Bool = sort
//使用變量調(diào)用函數(shù)
let result = fun(1,2)
print(result)

//冒泡排序法
var arr = [1,3,6,9,12]
func sortArr(parm:(Int,Int) -> Bool) {
    for i in 0..<arr.count - 1 {
        for j in 0..<arr.count - 1 - i {
            if (parm(arr[j], arr[j+1])) {
              let temp = arr[j]
              arr[j] = arr[j+1]
              arr[j+1] = temp
            }
        }
    }
}
sortArr(parm: sort)
print(arr)

func sort1(num: Int, num1: Int) -> Bool {
    return num < num1 ? true : false
}

//調(diào)用
sortArr(parm: sort1)
print(arr)

閉包

//閉包
let block = { (a : Int, b : Int) -> Bool in
    return a > b ? true : false
}

sortArr(parm: block)

let upSort : (Int, Int) -> Bool = {
    return $0 > $1
}

let downSort : (Int, Int) -> Bool = {
    return $0 < $1
}

sortArr(parm: upSort)
sortArr(parm: downSort)
print(arr)

day04

UIView

  • 在ViewController.swift中super.viewDidLoad()下鍵入:
//獲取當(dāng)前控制器view,設(shè)置背景顏色為紅色
        //self.view.backgroundColor = UIColor.red
        
        //初始化
        let rect = CGRect(x: 30, y: 30, width: 100, height: 200)
        let subView : UIView = UIView(frame: rect)
        //添加到父視圖上
        subView.backgroundColor = UIColor.red
        self.view.addSubview(subView)
        
        let subView1 = UIView()
        subView1.frame = CGRect(x: 140, y: 140, width: 100, height: 100)
        subView1.backgroundColor = UIColor.blue
        self.view.addSubview(subView1)
        
        let subView2 = UIView()
        subView2.frame = CGRect(x: 40, y: 40, width: 30, height: 30)
        subView2.backgroundColor = UIColor.green
        subView.addSubview(subView2)
        //frame 相對于父視圖的
        
        //bounds 相對于自身的坐標(biāo)
        print(subView1.bounds)
        
        
        //center
        let subView3 = UIView()
        self.view.addSubview(subView3)
        subView3.frame = CGRect(origin: self.view.center, size: CGSize(width: 100, height: 100))
        subView3.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
        
        //透明度
        //subView3.alpha = 0.1 //這種會影響子視圖
        subView3.backgroundColor = UIColor(colorLiteralRed: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)  //三原色修改透明度
        let subView4 = UIView(frame: CGRect(x: 10, y: 10, width: 40, height: 40))
        subView4.backgroundColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
        subView3.addSubview(subView4)
        
        //tag 使用2000以上的
        subView4.tag = 10001 //10000以上
        //subView4.isHidden = true //隱藏
        let tagView = subView3.viewWithTag(10001)
        print("subView4 = \(subView4),Tag = \(tagView)")
        
        //用戶交互??
        //self.view.isUserInteractionEnabled = false
        //self.view.isUserInteractionEnabled = true  //打開
        
        //superView
        print("superView = \(subView4.superview),subView3 = \(subView3)")
        
        //子視圖
        for item in self.view.subviews {
            //從父視圖上移除
            item.removeFromSuperview()
        }
//程序啟動
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //初始化window
        let frame = UIScreen.main.bounds
        self.window = UIWindow(frame: frame)
        
        //初始化控制器
        let myVC = MyViewController()
        
        //設(shè)置成window的根視圖控制器
        self.window?.rootViewController = myVC
        
        //把window設(shè)置成系統(tǒng)的主window
        self.window?.makeKeyAndVisible()
        
        return true
}
  • 在ViewController類中鍵入:

//開始點擊
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("點擊了當(dāng)前的控制器")
    }
  • command+n新建一個Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;

  • 在AppDelegate.swift中AppDelegate類中鍵入:


//程序啟動
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //初始化window
        let frame = UIScreen.main.bounds
        self.window = UIWindow(frame: frame)
        
        //初始化控制器
        let myVC = MyViewController()
        
        //設(shè)置成window的根視圖控制器
        self.window?.rootViewController = myVC
        
        //把window設(shè)置成系統(tǒng)的主window
        self.window?.makeKeyAndVisible()
        
        return true
    }
  • 在MyViewController.swift中viewDidLoad()事件下鍵入:
    self.view.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
  • 運行結(jié)果:
1.png

(注:文章代碼部分屬于后加,與前兩段寫作時間不是同一天。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末河爹,一起剝皮案震驚了整個濱河市匠璧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咸这,老刑警劉巖夷恍,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異媳维,居然都是意外死亡酿雪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門侄刽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指黎,“玉大人,你說我怎么就攤上這事州丹〈装玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵墓毒,是天一觀的道長吓揪。 經(jīng)常有香客問我,道長所计,這世上最難降的妖魔是什么柠辞? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮主胧,結(jié)果婚禮上叭首,老公的妹妹穿的比我還像新娘。我一直安慰自己踪栋,他們只是感情好焙格,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著己英,像睡著了一般间螟。 火紅的嫁衣襯著肌膚如雪吴旋。 梳的紋絲不亂的頭發(fā)上损肛,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音荣瑟,去河邊找鬼治拿。 笑死,一個胖子當(dāng)著我的面吹牛笆焰,可吹牛的內(nèi)容都是我干的劫谅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捏检!你這毒婦竟也來了荞驴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贯城,失蹤者是張志新(化名)和其女友劉穎熊楼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體能犯,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鲫骗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了踩晶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片执泰。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渡蜻,靈堂內(nèi)的尸體忽然破棺而出术吝,到底是詐尸還是另有隱情,我是刑警寧澤晴楔,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布顿苇,位于F島的核電站,受9級特大地震影響税弃,放射性物質(zhì)發(fā)生泄漏纪岁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一则果、第九天 我趴在偏房一處隱蔽的房頂上張望幔翰。 院中可真熱鬧,春花似錦西壮、人聲如沸遗增。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽做修。三九已至,卻和暖如春抡草,著一層夾襖步出監(jiān)牢的瞬間饰及,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工康震, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留燎含,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓腿短,卻偏偏與公主長得像屏箍,于是被迫代替她去往敵國和親绘梦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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