美文网首页
swift day 3--自定义类型

swift day 3--自定义类型

作者: michaeljacc | 来源:发表于2016-05-02 18:14 被阅读161次

    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

    相关文章

      网友评论

          本文标题:swift day 3--自定义类型

          本文链接:https://www.haomeiwen.com/subject/fpelrttx.html