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(width: 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部分了,虽然以前也学习过,但是这次是要用一种新的语言来写的,想必大家多多少少都会知道点的吧,所以在明天的博客中,还望大家多提意见了,加油加油!

  

时间: 2024-08-11 18:15:49

Swift学习之类和结构体的创建的相关文章

Swift学习(类和结构体)

类和结构体: 相同点: 1.都可以定义属性 2.都可以定义方法,这一点是Swift根C,OC的明显区别之一 3.他们都可以定义构造器(初始化方法) 4.都可以遵循协议 5.他们都可以被扩展 不同点: 1.类可以被继承,而结构体不可以 2.类可以被类型推断 3.类可以通过 析构(dealloc) 释放内存 4.类是 引用类型, 结构体是 值类型 使用 class 和 struct 来分别表示类和结构体 定义 类 class Car { var name : String? func printNa

Swift学习——A Swift Tour 枚举和结构体

Enumerations and Structures Enumerations   枚举的使用 使用 enum 定义一个枚举,枚举里面可以关联方法,比如下文中的描述方法 enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { ca

Swift 的类、结构体、枚举等的构造过程Initialization(上)

构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务. 构造过程是通过定义构造器(Initializers)来实现的,这些构造器可以看做是用来创建特定类型实例的特殊方法.与 Objective-C 中的构造器不同,Swift 的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化. 类实例也可以通过定义析构器(deinitializer)在类实例释放之前执行特定的清除工作.想了解更多关于

[转]站在OC的基础上快速理解Swift的类与结构体

(阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡顿,直接闪退等问题,尤其是在Swift和OC混编时.(不知道其他开发者是否也有这样的经历,但是我相信这样的问题,很快会得到解决) 然后感觉Swift并不像网上很多朋友说的那样简单.有很多细节问题是值得注意的,甚至有很多思路是颠覆了传统的开发语言的!又有很多特性是结合了其他编程语言的优点! Swif

在OC的基础上快速理解Swift的类与结构体

Swift中,类和结构体都是对数据和方法进行封装的常用做法!首先我们来看看他们的共同之处: 都可以有属性和方法: 都有构造器: 都支持附属脚本: 都支持扩展: 都支持协议. 然后我们来看看他们的不同之处: 类有继承: 结构体有一个自动生成的逐一初始化构造器: 在做赋值操作时,结构体总是被拷贝(Array有特殊处理): 结构体可以声明静态的属性和方法: 从设计模式的角度来分析,类的设计更侧重于对功能的封装,而结构体的设计更侧重于对数据的封装.(汽车与书架来区分类与结构体) 一.构造过程 1. 默认

Swift:什么时候使用结构体和类

发布于 2015 年 8 月 14 日 世界上对swift持续不断的讨论话题中有一个就是什么时候使用结构体什么时候使用类.我想我今天要贡献一些自己的想法. 值 VS 引用 答案其实很简单:当你需要值语义(所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响)的时候使用结构体,当你需要引用语义(所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响)的时候使用类.就是那样! 欢迎下周再来... 等等! 怎

Swift 的类、结构体、枚举等的构造过程Initialization(下)

类的继承和构造过程 类里面的全部存储型属性--包含全部继承自父类的属性--都必须在构造过程中设置初始值. Swift 提供了两种类型的类构造器来确保全部类实例中存储型属性都能获得初始值,它们各自是指定构造器和便利构造器. 指定构造器和便利构造器 指定构造器是类中最基本的构造器.一个指定构造器将初始化类中提供的全部属性,并依据父类链往上调用父类的构造器来实现父类的初始化. 每个类都必须拥有至少一个指定构造器.在某些情况下,很多类通过继承了父类中的指定构造器而满足了这个条件.详细内容请參考兴许章节自

C#学习记录4——结构体,接口

1.结构体 对于C++语言来说,其实结构体和类几乎没有什么太大的区别.类能够实现的功能,使用结构体大部分也可以. 不过,在C#里面,我们把结构体看作是一种轻量的类的替代品.它和类一样有构造方法,属性,成员属性/数据,甚至是操作符.注意struct构造方法必须有传入参数. 当然struct也不是完全支持类的所有功能的. 首先,结构体无法进行继承.也就是说,结构体不想类那样灵活,代码也无法复用. 其次,也是非常重要的一点:结构体是一种值类型,而类是引用类型.这两种类型的区别,可以查看C#学习记录3上

Swift的继承和结构体的初始化

/* Swift的继承 如果要重写父类的存储属性 1.重写后可以给它加属性观察器.列一: 2.可以把其改为计算属性(但不可减少父类属性原本的功能).列二: 3.父类的只读(只有get,或者let),子类不能添加属性观察器.列三: 如果重写父类的计算属性 1.父类计算属性只有只读,子类重写后可以给其加上seter方法.列四: 方法继承.列五: */ //列一: class Person { var name: String = "cj" } class Child:Person { ov