实训第一周心得博客

实训第一周心得

第一天

  • FirstDay-Lesson1
    • 老师介绍了playground的使用方法,以及各种功能,
    • 以下是第一节课所学习的代码
//自动类型推断 var 定义变量
var str = "Hello, playground"
//let 定义常量(不能修改的量)
let name = "Hello,playground"

//数据类型
//字符串
let name1 : String = "Lanou"
//字符
let gender : Character = "M"
//整型
let age :Int = 12
//浮点型
let height : Float = 12.2
//双精度浮点型
let height1 : Double = 12.222

//字符串
//长度
let length = name.characters.count
//拼接
var name3 = name + "pin\(123)jie"
print("name = \(name3)")

let index = name.index

//遍历
for item in name3.characters {
    
}

//切割
var school = "Jininshifan"
let index1 = school.index(school.startIndex,offsetBy:2)
let newSchool = school.substring(to:index1)
print(newSchool)

//数组
var arr = [1,2,3]
var arr1 : [Int] = [Int]()

//增加元素
arr1.append(2)

//删除元素
let element = arr1.remove(at:0)

//更新元素
arr[1] = 22
print(arr)

//字典
var dic: [Int: Int] = [1:1, 2:2]

// 添加,更新
dic[1] = 2        //更新
dic[3] = 3        //添加

//删除
dic.removeValueForKey(1)
print(dic)


//rang
let student = "yl"
let startIndex = student.index(student.startIndex,offsetBy :2)
let endIndex = student.index(student.endIndex,offsetBy:-2)
let rang = startIndex..<endIndex
student.substring(with:rang)
  • Firstday-Lesson2
    • 这节课学习了数组的三种遍历方式
    • 以及冒泡排序
/*
数组的三种遍历方法
一:
 for item in names{
    print(item)
}

二:
//index  索引  item 获取的值
  for(index,item)in names.enumerated(){
    print("index = \(index),item = \(item)")// “ \\ ”转义字符
}

三:
 for i in 1...<10{
    print(i)
}
*/
//冒泡排序
var arr = [2,8,4,10,31,20]
//冒泡
for i in 0..<arr.count - 1 {//循环多少轮
    for j in 0..<(arr.count - i - 1){//比较多少次
        //比较换位置
        if (arr[j] > arr[j+1]){
            let temp = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
        }
    }
}
print (arr)
  • Firstday-Lesson3
    • 第三节课,简单介绍了类的定义,强制拆包(解析)以及可选类型等。
类的定义
/*
 class 类名:父类{
 
 }
*/

class Node :NSObject {
    // !强制拆包(解析)
    var data: Int!
    // ?可选类型
    var leftChild : Node?
    var rightChild :Node?
}

var name: String?
print(name!)
  • Firstday-Lesson4
    • 第四节课,介绍了一个相当于数列的题型,
    • 还有函数的参数及返回值等
    • 不定参数
    • 声明一个inout 函数,并且将传进来的值进行交换
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

var node7 : Node = Node()   //根节点
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6


func readData(node : Node){
    var arr = [Node]()  //创建数组
    arr.append(node)
    while arr.count > 0{
        let temp = arr[0]
        if let _ = temp.leftChild{   //可选绑定
            arr.append(temp.leftChild!)    //左边孩子装进数组
        }
        if let _ = temp.rightChild {
            arr.append(temp.rightChild!)
        }
        print(temp.data)
        arr.remove(at: 0) //读取完第一个元素的时候删除
    }
}
readData(node: node7)
//函数
//1 无参无返回值
func fun1() {
    print("无参数无返回值")
}
fun1()  //调用

//2,无参数有返回值
func fun2() -> Int{
    print("无参数有返回值")
    return 0
}
fun2()

//3,有参数有返回值
func fun3() {
    print("有参数有返回值")
}
fun3()

//4,有参数无返回值
func fun4() {
    print("有参数无返回值")
}
fun4()


//不定参数
func func5 (parm : Int...) {
    var result: Int = 0
    for i in parm {
        result += i
    }
    print(result)
}
//声明了一个inout 函数  (有两个参数) 并且将传进来的值进行交换
func fun6(a : inout Int, b: inout Int) {
    let temp = a
    a = b
    b = temp
}

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

第二天

  • SecondDay-Lesson1
    • override 重写父类,init 初始化方法
    • deinit 析构函数
    • 类的存储属性和计算属性
    • lazy 属性
class Student : NSObject {
    var name : String?
    var age : Int?
    var gender : Bool?
    //override 重写父类
    override init() {   //初始化方法
        print("创建了一个学生对象")
    }
    init(age : Int, gender : Bool,name : String) {
        super.init()
        self.age = age
        self.gender = gender
        self.name = name
        
    }
deinit {  //析构函数
    print("对象释放")
    }
}

var st : Student = Student(age: 12, gender: false, name: "22")
print("st.name = \(st.name) st.gender = \(st.gender) st.age = \(st.age)")
// 类
class Person : NSObject {
    var name : String?  // 存储属性
    var age : Int?     // 存储属性
    
//计算属性
var fatherAge : Int {
    set {    //  newValue是默认值
    self.age = newValue - 20
    }
    get {
    return self.age! + 20
    }
}
    
// lazy 属性
    
lazy var st : Student = Student()
//函数
func eat() {
print("吃饭")
}
    
//
class func happy() {
print("happy")
}
    
static func study() {
print("学习")
}
    
//类属性
static var fatherName : String?
}
//结构体 //1.结构体不能继承 //2,结构体是值类型,类是引用类型
struct Dog {
    var name : String?
}

var p : Person = Person()
//print(p.st)
p.name = "张三"
var dog : Dog = Dog()
dog.name = "汪柴"

var p1 = p
var dog1 = dog

p1.name = "李四"
dog1.name = "大黄"
print("p.name = \(p.name) dog.name = \(dog.name)")
  • SecondDay-Lesson2
    • 这节课学习了协议
    • 学习了用协议求出三角形,正方形,长方形的面积,周长。
//定义一个协议
protocol PersonProtocol {
    func study()
}
//可选协议
@objc protocol StudentProtocol {
    @objc optional func happy()
    var name1 : String{set get}
}

class Person : NSObject,PersonProtocol,StudentProtocol{
    //internal var name1: String = ""
    var newname : String?
    var name1: String {
        get {
        return self.newname!
        }
        set {
            self.newname = newValue
        }
    }
    func study() {
    }
}
//三角形
//正方形
//长方形

protocol  TuxingProtocol {
    func MJ() -> Float
    func ZC() -> Float
}

class ThreeAngle:NSObject,TuxingProtocol {
    var height : Float!
    var d : Float!
    func MJ() -> Float {
        return height * d / 2.0
    }
    func ZC() -> Float {   //等边三角形
        return d * 3;
    }
}

class FourAngle: NSObject,TuxingProtocol{
    var b : Float!
    func MJ() -> Float {
        return b * b
    }
    func ZC() -> Float {
        return b * 4
    }
    
}

class zeroAngle:NSObject,TuxingProtocol{
    var radio :Float!
    func MJ() -> Float {
        return radio * radio * 3.14;
    }
    func ZC() -> Float {
        return radio * 2 * 3.14
    }
}

var t : ThreeAngle = ThreeAngle()
t.d = 3
t.height = 4
print("三角形的面积是:\(t.MJ())")
print("三角形的周长是:\(t.ZC())")
  • SecondDay-Lesson3
    • 设置代理,并且学习了男孩女孩购物的题型
    • 练习了文件下载:开始,结束,错误等的题型
//文件类

protocol FileProtocol {
    func Begin() ;
    func Xzz() ;
    func End() ;
    func Error() ;
}

class File : NSObject {
    var delegate : FileProtocol?
    override init() {
        
    }
    //开始
    func FileBegin() {
        if let _ = delegate {
            delegate?.Begin()
        }
    }
    //下载过程中
    func FileXzz() {
        if let _ = delegate {
            delegate?.Xzz()
        }
    }
    //结束
    func FileEnd() {
        if let _ = delegate {
            delegate?.End()
        }
    }
    //发生错误
    func FileError() {
        if let _ = delegate {
            
            delegate?.Error()
        }
    }
}

//处理文件类
class MakeFile : NSObject,FileProtocol {
    internal func Error() {
        print("下载发生错误")
    }

    internal func End() {
         print("下载结束")
    }

    internal func Xzz() {
        print("文件正在下载")
    }

    internal func Begin() {
        print("下载开始")
    }

    //把四种状态传递过来
    /*func Begin() {
        print("下载开始")
    }
    
    func Xzz() {
        print("文件正在下载")
    }
    
    func End() {
        print("下载结束")
    }
    
    func Error() {
        print("下载发生错误")
    }*/
    
}
let file : File = File()
let makefile : MakeFile = MakeFile()
file.delegate = makefile
file.FileBegin()
file.FileEnd()
file.FileXzz()
file.FileError()
  • ThirdDay-Lesson1
    • 泛型,打印数字,打印字符串,打印字符
    • 闭包
    • 冒泡排序以及调用
//泛型
//打印数字  打印字符串  打印字符
func MyPrintNumber(parm:Int) {
    print(parm)
}

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

func MyPrintCharacter(parm:String) {
    print(parm)
}
//使用泛型之后一个就可以了
func MyPrint<T>(parm :T) {
    print(parm)
}
//闭包
func sort(num: Int,num1: Int) -> Bool {
    //if num >num1 true 否则  false
    return num > num1 ? true : false
}
//定义一个变量  把sort赋值给变量
let fun : (Int,Int)->Bool = sort

//使用变量调用函数
let result = fun(1,2)
//print(result)
//冒泡排序
var arr = [10,2,5,2,9,2,5,6]
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
}
//调用
sortArr(parm: sort1)
print(arr)

let block = { (a : Int,b : Int) -> Bool in
    return a > b ? true : false
    
}
sortArr(parm: block)
  • ThirdDay-Lesson2
    • 这节课进行了小测试
//第一题 对一个数组进行遍历,要求使用两种方式。(数组自定义)
/*
var arr = [2,4,5,7,6,8,1]
 
/*1,
 for name in arr {
    print(name)
}
*/2,
for(index, item)in arr.enumerated() {
  print("index = \(index), item = \(item)")
}
/*3,
for index in 0..<arr.count {
 print(arr[index])
 }
 */
*/


//第二题  声明一个函数,要求函数功能要实现对一个数组的排序,并且把这个数组返回。(冒泡排序)

/*
func fun(num : Int,num1 : Int) -> Bool {
    return num > num1 ? true : false
}

let fun2 : (Int,Int)->Bool = fun

//let result = fun2[1,2]

var arr = [3,5,14,6,8,43]
func fun2Arr(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
            }
        }
    }
}
fun2Arr(parm: fun)
print(arr)
*/

//第三题  声明一个inout函数,这个函数有两个参数,并且实现交换传递进来的参数值。

/*
func fun(a : inout Int, b : inout Int) {
    let temp = a
    a = b
    b = temp
}
var a = 10
var b = 20
fun(a : &a,b : &b)
print("a = \(a) b = \(b)")

*/

/*
 第四题  实现图书管理系统:(60分)
1、使用数组管理所有书籍。
2、数组可以添加、删除。
3、可以从数组根据书名查找书籍,并修改书籍的价格。
4、展示所有书籍清单(书名)。
提示:
(1)声明一个书类: Book
给这个类添加: 书名,价格的属性
(2)声明一个管理书籍类: BookManger
给这个类添加:添加,删除,修改书籍价格,展示所有书籍的方法
*/

struct Book {
    var name : String?
    var price : Float?
    init(name : String, price : Float) {
        self.name = name
        self.price = price
    }
    
}
class BookMgr : NSObject {
    lazy var BookArr : [Book] = [Book]()
    
    func addBook(book : Book) {
        self.BookArr.append(book)
      
    }
    func deleteBook(name : String) -> String {
       //查找这本书
        var isExit = false   //不存在的
        for (index, item) in BookArr.enumerated() {
            if item.name == name {
                self.BookArr.remove(at: index)
               isExit = true
            }
        }
        return isExit ? "删除成功" : "删除失败"
    
    }
    
    func updatePrice(price:Float,withName Name:String) -> String {
        var isExit = false
        //先查找图书
        for(index,item)in BookArr.enumerated() {
            if item.name == Name {
                //修改价格
                BookArr[index].price = price
                isExit = true
            }
        }
        return isExit ? "修改成功" : "修改失败"
    }
    
    //展示所有的书籍的清单
    func showAllName() {
        for item in BookArr{
            if let _ = item.name{
                print(item.name! + "价钱为\(item.price)")
            }
        }
    }
}

let book = Book(name:"zhangsan",price:10.1)
let book2 = Book(name:"zhangsan",price:10.2)
let book3 = Book(name:"zhangsan",price:10.3)
let book4 = Book(name:"zhangsan",price:10.4)


let mgr = BookMgr()
mgr.addBook(book: book)
mgr.addBook(book: book2)
mgr.addBook(book: book3)
mgr.addBook(book: book4)

print(mgr.deleteBook(name: "zhangsan"))

print(mgr.updatePrice(price: 2, withName: "lisi"))

mgr.showAllName()
  • ForthDay-Lesson1
    • 今天学习了UI,学习了UIView的很多属性,
 //获取当前控制器的view,设置背景颜色为红色
        //self.view.backgroundColor = UIColor.red
        //iPhone6视图 :x = 375   y = 667
        
        //设置坐标大小
      /*let rect = CGRect(x: 30, y: 30, width: 100, height: 100)
        let subview : UIView = UIView(frame: rect)
        subview.backgroundColor = UIColor.green
        //添加到父视图上
        self.view.addSubview(subview)
        
        let subView1 = UIView()
        subView1.frame = CGRect(x: 140, y: 240, width: 100, height: 100)
        subView1.backgroundColor = UIColor.yellow
        self.view.addSubview(subView1)
        //frame  相当于父视图的
        
        //bounds 相对于自身的坐标
        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.8078431487, green: 0.02745098062, blue: 0.3333333433, 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.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)
        subview3.addSubview(subview4)
        
        //tag  使用2000以上的
        subview4.tag = 10001
        //subview4.isHidden = true   //隐藏
        let TagView = subview3.viewWithTag(10001)
        print("subview4 = \(subview4), TagView = \(TagView)")
        
        //用户交互
        //self.view.isUserInteractionEnabled = false
        
        // superView  父视图
        print("superView = \(subview4.superview),subview3 = \(subview3)")
        
        //子视图
        for item in self.view.subviews {
            //从父视图上移除
            item.removeFromSuperview()
        }
}
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("点击了当前控制器")
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

总结就先到此为止,不断学习不断记录,
希望付出会有回报
最后,感谢蓝鸥杨少锋老师的不吝传授!
敬礼··

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,020评论 0 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,515评论 25 707
  • (三) 已是深秋时节,落叶铺满了恒生大学的校园,这些树叶似乎想一口气落完,也许是不想忍受生命最后一刻的煎熬吧。校园...
    说鱼之乐阅读 286评论 0 2
  • 电影中,格拉斯被凶猛的大熊咬伤后,濒临死亡。队长权衡利弊,为了让更多人走出荒野,雇两个人留下陪格拉斯最后一程,等他...
    安慰不倒翁阅读 547评论 0 1
  • 我独身一人 从西北行至西南 与绿皮火车一路喜悦相伴 一路的漆黑无眠没有恐惧 燃烧的重生火焰 烧尽了秋带不走的挣扎 ...
    莫暇阅读 340评论 13 9