zoukankan      html  css  js  c++  java
  • Swift学习之类和结构体的创建

       随着一步步的学习,学习到的新知识越来越多了,不管是新的还是旧的,都禁不住时间的堆积,再熟悉的知识点时间久了都会渐渐的忘记,也许这就是人们生活中一种潜在的惰性吧,看似非常熟悉的东西,等到真正要用的时候,却拿不出手来,总是似懂非懂的,所以无论知识点多么多,过的时间多久,我们都要经常拿出来练习下,以免忘记.这些对于我们来说都是非常重要的,有的人会认为我记性非常好,写一遍都可以记住,但是真的是这样吗,所话说的好,好记性不如烂笔头,说的就是那些好吃懒做的人,所以我希望大家都可以多动手,经常练习我们所学过的知识,让他真正的牢记于心!

       下面就为大家讲解下今天所学习的知识点吧,那就是类和结构体:

       类是用关键字 class来表示的, 结构体是用struct来表示的,下面附上具体代码:

    class SomeClass {
        
    }
    
    struct Length {
        //在Swift中可以对变量初始化
        var start : Float = 0.0
        var end : Float = 0.0
        //在Swift中可以定义方法
        func calLength() {
            println(self.end - self.start)
        }
    }
    //调用了默认的构造器 init
    var length = Length()
    //点语法访问元素
    length.start = 7.0
    length.end = 3.0
    length.calLength()
    
    // 逐一构造器 ,  只有结构体才有的, 类是没有的
    var len = Length(start: 3.0, end: 9.9)

       以上跟OC中有点相似,可以通过点语法访问元素变量。

       下面再附上具体示例:

    func calLength(length: Length) {
        println(length.start - length.end)
    }
    
    calLength(length)

       这个是用来计算点之间的距离的。

       除此之外我们今天还学习了计算类型,不是直接存值,而是系统提供了一个getter方法来获取值,并且还提供了一个setter方法来设置新的值具体示例如下

    struct Rect {
        var origin = Pointed()
        var Rect = hah()
        var center : Pointed {
            get{
                let centerX = self.origin.x + self.Rect.width / 2.0
                let centerY = self.origin.y + self.Rect.height / 2
                return Pointed(x: centerX, y: centerY)
            }
            set(newCenter){
                origin.x = newCenter.x - self.Rect.width / 2
                origin.y = newCenter.y - self.Rect.height / 2
            }
        }
        //使用mutating关键字来修饰 作用:可以修改属性的值
        mutating func calCenter() {
    //        return Pointed(x: self.origin.x + self.Rect.width / 2.0, y: self.origin.y + self.Rect.height / 2.0)
            self.center = Pointed(x: self.origin.x + self.Rect.width / 2, y: self.Rect.height / 2 + self.origin.y)
        }
    }
    
    var rect = Rect(origin: Pointed(x: 50, y: 55), Rect: hah( 100, height: 55))
    rect.calCenter()
    
    var rect1 = Rect()
    rect1.origin.x = 100
    rect1.origin.y = 100
    rect1.Rect.height = 100
    rect1.Rect.width = 100
    rect1.center
    rect1.center = Pointed(x: 300, y: 300)
    rect1.origin

        通过mutating关键字可以进行属性值得修改。

        类跟结构体的选择:

        按照通用的准则:当符合一下其中一条或者多条条件的时候,请考虑使用结构体

      1.结构体大的使用目的:用来封装尽量少得简单数据

      2.结构体拷贝的时候,属于值得拷贝

      3.任何在结构体重存储的值类型属性,都会被拷贝,而不是引用

      4.结构体无需要去继承另一个已存在的类型的属性或者行为

       虽然今天讲的不是很多吧,更多的是回顾以前所学习的知识点,虽然算不上是大牛吧,但是还是希望可以和友友们多进行交流,不管是技术上,还是什么,都希望可以从中得到提高,所以希望大家都不吝赐教了,最后为大家附上本堂课的一个练习题,题目是这样的:定义一个Student的结构体, name,age作为属性, 构造方法(对name,age赋初值),实例方法(pringStuInfo),类方法(printStuSorry)。下面便是详细代码了:

    struct Student {
        static var name = "小花"
        static var age = 0.0
        static func printStuSorry() {
            println("ByeBye")
        }
        func pringStuInfo() {
            println("哈哈, 你错了")
        }
    }
    
    Student.name = "网吧"
    Student.name
    Student.printStuSorry()
    var stu = Student()
    stu.pringStuInfo()
    
    struct Student1 {
        var name : String?
        var age : Int?
        
        init() {
            self.name = "老王"
            self.age = 25
        }
        init (name:String, age:Int) {
            self.name = name
            self.age = age
        }
        func printStuInfo() {
            //字符串输出:""
            println("name = (self.name!) age = (self.age!)")
            
            println("小李子 = (self.name!) age = (self.age!)")
        }
        mutating func changeName(newName: String) {
            self.name! = newName
        }
    
        static func printStuSorry() {
            println("我粗了~×")
        }
    }
    
    var Stu2 = Student1()
    Stu2.changeName("乔明")
    Stu2.printStuInfo()
    Student.printStuSorry()
    
    class Teacher {
        var name : String?
        var age : Int?
        init() {
            self.name = "老李"
            self.age = 18
        }
        init(name: String, age: Int) {
            self.name = name
            self.age = age
        }
        
        func printTeachInfo() {
            println("name = (self.name!), age = (self.age!)")
        }
        
        class func printTeachSorry() {
            println("错了错了")
        }
    }
    
    var stu3 = Teacher()
    stu3.printTeachInfo()
    Teacher.printTeachSorry()

       好了今天就到这里了,由于今天所学习的东西并不是很多,所以今天就不说那么多了,明天我们就要学习UI部分了,虽然以前也学习过,但是这次是要用一种新的语言来写的,想必大家多多少少都会知道点的吧,所以在明天的博客中,还望大家多提意见了,加油加油!

       

  • 相关阅读:
    Spring IoC容器的设计——BeanFactory应用场景2
    Spring IoC容器的设计——BeanFactory应用场景
    jQuery学习备忘
    Spring IoC容器的设计—3—次线
    Spring IoC容器的设计—2—主线
    Spring IoC容器的设计—1—主线
    关于备忘信息重置解决方案
    E45: 'readonly' option is set (add ! to override)
    未知高度元素居中
    background
  • 原文地址:https://www.cnblogs.com/dyx-wx/p/4273258.html
Copyright © 2011-2022 走看看