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

2016年11月18日 星期五 晚

11月的集寧,相對(duì)于來(lái)大學(xué)的以往兩年反倒給人一些暖意,但畢竟是晚上,天氣預(yù)報(bào)的降溫也漸漸的若隱若現(xiàn)了,集寧的冬天終于要來(lái)了。想想大三正在經(jīng)歷過(guò)的集寧,突然覺(jué)得有些懷念,暖暖的集寧竟給人一絲可愛(ài)的留念的味道,貌似之前寒風(fēng)刺骨的感覺(jué)沒(méi)有那么的強(qiáng)烈,那么的“可怕”了。每次從教室到食堂再到宿舍的三點(diǎn)一線途中,總有種被集寧的大風(fēng)吹成“傻狗”的感覺(jué),然而今年,卻對(duì)她的看法發(fā)生了改變。我想,我是愛(ài)她的,而她,也是愛(ài)我們的。

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

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

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

day01

定義常量、變量

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

基本數(shù)據(jù)類(lèi)型

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

//遍歷
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)
//更新元素(把第二個(gè)元素?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)

二叉樹(shù)的層級(jí)遍歷

//二叉樹(shù)的層級(jí)遍歷
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é)點(diǎn)
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6

func readData(node : Node){
    var arr = [Node]()  //定義數(shù)組
    arr.append(node)  //根節(jié)點(diǎn)裝進(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)  //讀取完第一個(gè)元素的時(shí)候刪除
    }
}
readData(node: node7)

函數(shù)

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

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

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

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

//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

重寫(xiě)父類(lèi)(并進(jìn)行初始化)

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

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

  • 類(lèi)
//類(lèi)
class Person : NSObject {
    //存儲(chǔ)屬性
    var name : String?
    var age : Int?
    //計(jì)算屬性
    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("吃飯")
    }
    //類(lèi)名調(diào)用(類(lèi)函數(shù))
    class func happy() {
        print("happy")
    }
    //靜態(tài)不可繼承
    static func study() {
        print("學(xué)習(xí)")
    }
    //類(lèi)屬性
    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)體是值類(lèi)型,類(lèi)是引用類(lèi)型
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é)議
//定義一個(gè)協(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í)題
//求圖形的面積及周長(zhǎng)(用協(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("長(zhǎng)方形的面積長(zhǎng)為:",triangle.Area())
print("長(zhǎng)方形的周長(zhǎng)為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長(zhǎng)為:",square.Area())
print("正方形的周長(zhǎng)為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長(zhǎng)為:",circle.Area())
print("圓形的周長(zhǎng)為:",circle.Perimeter())
  • 練習(xí)題(2)
protocol GirlProtocol {
    func payTheBill()
    func happy()
}
//delegate
class Girl : NSObject {
    //保存代理值
    var delegate : GirlProtocol?
    //
    func shopBigin() {
        if let _ = delegate {
            delegate?.happy()
        }
    }
    //購(gòu)物完畢
    func shopOver() {
        if let _ = delegate {
            self.delegate?.payTheBill()
        }
    }
}

class Boy : NSObject, GirlProtocol {
    func payTheBill() {
        //實(shí)現(xiàn)協(xié)議
        print("買(mǎi)單")
    }
    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 {
    //開(kāi)始
    func Start()
    //下載過(guò)程中
    func downProcess()
    //結(jié)束
    func End()
    //發(fā)生錯(cuò)誤
    func Error()
}

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

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

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)
}

//泛型只寫(xiě)一個(gè)
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
}
//定義一個(gè)變量 把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 相對(duì)于父視圖的
        
        //bounds 相對(duì)于自身的坐標(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 //這種會(huì)影響子視圖
        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)")
        
        //用戶(hù)交互??
        //self.view.isUserInteractionEnabled = false
        //self.view.isUserInteractionEnabled = true  //打開(kāi)
        
        //superView
        print("superView = \(subView4.superview),subView3 = \(subView3)")
        
        //子視圖
        for item in self.view.subviews {
            //從父視圖上移除
            item.removeFromSuperview()
        }
//程序啟動(dòng)
    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類(lèi)中鍵入:

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

  • 在AppDelegate.swift中AppDelegate類(lèi)中鍵入:


//程序啟動(dòng)
    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)
  • 運(yùn)行結(jié)果:

day01

定義常量、變量

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

基本數(shù)據(jù)類(lèi)型

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

//遍歷
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)
//更新元素(把第二個(gè)元素?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)

二叉樹(shù)的層級(jí)遍歷

//二叉樹(shù)的層級(jí)遍歷
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é)點(diǎn)
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6

func readData(node : Node){
    var arr = [Node]()  //定義數(shù)組
    arr.append(node)  //根節(jié)點(diǎn)裝進(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)  //讀取完第一個(gè)元素的時(shí)候刪除
    }
}
readData(node: node7)

函數(shù)

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

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

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

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

//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

重寫(xiě)父類(lèi)(并進(jìn)行初始化)

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

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

  • 類(lèi)
//類(lèi)
class Person : NSObject {
    //存儲(chǔ)屬性
    var name : String?
    var age : Int?
    //計(jì)算屬性
    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("吃飯")
    }
    //類(lèi)名調(diào)用(類(lèi)函數(shù))
    class func happy() {
        print("happy")
    }
    //靜態(tài)不可繼承
    static func study() {
        print("學(xué)習(xí)")
    }
    //類(lèi)屬性
    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)體是值類(lèi)型,類(lèi)是引用類(lèi)型
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é)議
//定義一個(gè)協(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í)題
//求圖形的面積及周長(zhǎng)(用協(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("長(zhǎng)方形的面積長(zhǎng)為:",triangle.Area())
print("長(zhǎng)方形的周長(zhǎng)為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長(zhǎng)為:",square.Area())
print("正方形的周長(zhǎng)為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長(zhǎng)為:",circle.Area())
print("圓形的周長(zhǎng)為:",circle.Perimeter())
  • 練習(xí)題(2)
protocol GirlProtocol {
    func payTheBill()
    func happy()
}
//delegate
class Girl : NSObject {
    //保存代理值
    var delegate : GirlProtocol?
    //
    func shopBigin() {
        if let _ = delegate {
            delegate?.happy()
        }
    }
    //購(gòu)物完畢
    func shopOver() {
        if let _ = delegate {
            self.delegate?.payTheBill()
        }
    }
}

class Boy : NSObject, GirlProtocol {
    func payTheBill() {
        //實(shí)現(xiàn)協(xié)議
        print("買(mǎi)單")
    }
    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 {
    //開(kāi)始
    func Start()
    //下載過(guò)程中
    func downProcess()
    //結(jié)束
    func End()
    //發(fā)生錯(cuò)誤
    func Error()
}

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

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

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)
}

//泛型只寫(xiě)一個(gè)
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
}
//定義一個(gè)變量 把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 相對(duì)于父視圖的
        
        //bounds 相對(duì)于自身的坐標(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 //這種會(huì)影響子視圖
        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)")
        
        //用戶(hù)交互??
        //self.view.isUserInteractionEnabled = false
        //self.view.isUserInteractionEnabled = true  //打開(kāi)
        
        //superView
        print("superView = \(subView4.superview),subView3 = \(subView3)")
        
        //子視圖
        for item in self.view.subviews {
            //從父視圖上移除
            item.removeFromSuperview()
        }
//程序啟動(dòng)
    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類(lèi)中鍵入:

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

  • 在AppDelegate.swift中AppDelegate類(lèi)中鍵入:


//程序啟動(dòng)
    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)
  • 運(yùn)行結(jié)果:
1.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容