swift day 3--自定义类型

swift day 3--自定义类型
Struct - 定制更复杂的类型

表示人名时可能需要两个字符串.Swift允许我们根据实际需要,定义自己的类型系统,并把这种自定义的类型叫做 named types

Swift 中有四种named types

  • Struct 结构
  • class 类
  • enum 枚举
  • protocol 协议

struct - value type 表达值型

比如两个无意义的浮点数,组合就可以表达一个点的location,两个点组成的Struct就有的概念

定义一个struct

let centerX = 100.0
let centerY = 100.0
let distance = 200.0

func inRange(x: Double, y: Double) -> Bool {
    //sqrt(n) pow(x, n)
    let disX = x - centerX
    let disY = y - centerY
    
    let dist =
        sqrt(pow(distX, 2) + pow(distY, 2))
        //sqrt(n)用来计算n的平方根,pow(x,n)用来计算n次方,它们都是Swift提供的库函数.
        inRange(100, y:500)
        inrange(300, y:800)
}

初始化struct

struct StructName{/* Struct memberes*/}

Struct Location{
    let x: Double
    var y: Double
} 
let pointA =Location(x: 100, y: 200)

func inPointRange(Location) -> Bool {
    //sqrt(n) pow(x, n)
    let disX = pointX - centerX
    let disY = pointY - centerY
    
    let dist =
        sqrt(pow(distX, 2) + pow(distY, 2))
    
inPointRange(pointA)

之前我们讲函数的时候,说过函数的第一个参数是省略outername的,但是在init里,第一个参数的outername是不会省略的,我们必须指定每一个参数的outername。
Swift在Struct中默认不允许我们在method里修改成员的值,如果我们要修改它,需要在对应的方法前面使用mutating关键字。之后,我们就可以这样

Class

  • class类型是一个Reference Type(引用类型)
  • class类型没有默认的init方法.如果我们不指定它,swift编译器就会报错.swift要求我们用init方法大招一个对象
  • class 它的值不能被改变,不能引用其他class的对象.
  • 如果struct中的method要修改其成员,我们要明确把它定义为mutating:
  • class必须init初始化
  • 值类型的变量赋值,会把变量的值完整的拷贝
  • class引用类型的变量赋值,会复制一个指向相同对象的引用,因此修改p2.x会影响p5.x;
  • optional is an enum

propert

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容