Swift-学习

实训第一周心得博客

2016-11-20  本文已影响0人  文艺小年青

实训第一周心得

第一天

//自动类型推断 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)
/*
数组的三种遍历方法
一:
 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)
类的定义
/*
 class 类名:父类{
 
 }
*/

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

var name: String?
print(name!)
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)")

第二天

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)")
//定义一个协议
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())")
//文件类

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()
//泛型
//打印数字  打印字符串  打印字符
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)
//第一题 对一个数组进行遍历,要求使用两种方式。(数组自定义)
/*
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()
 //获取当前控制器的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()
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读