美文网首页
iOS开发 - 「Swift 学习」Swift的构造过程(二)

iOS开发 - 「Swift 学习」Swift的构造过程(二)

作者: 俺不是大佬儿 | 来源:发表于2022-03-08 14:45 被阅读0次

    可选属性类型

    当定制的类型包含一个逻辑上允许取值为空的存储型属性,需要将其定义为可选类型(可选属性类型)

    将存储属性声明为可选时,将自动初始化为空(nil)

    //可选属性类型
        //可选属性类型
        struct FrameOptional {
            //定义可选属性类型
            var length:Double?
            init(frombreadth breadth:Double?){
                length = (breadth ?? 0.0) * 10
            }
            
            init(_ area:Double?){
                length = area ?? nil
            }
        }
    

    调用

    func FrameOptionalFunc(){
            let rectArea = FrameOptional(30)
            print("面积为:\((rectArea.length) ?? 0.0)")
            
            let noneRectArea = FrameOptional(frombreadth: nil)
            print("面积为:\(noneRectArea.length)")
        }
    

    调用结果

    面积为:30.0
    面积为:Optional(0.0)
    

    构造过程中修改常量属性

    只要在构造过程结束前常量的值能确定,可以在构造过程中的任意时间点修改常量属性的值

    对类实例来说,它的常量属性只能在定义它的类的构造过程中修改,不能在子类中做修改

    //构造过程中修改常量属性
        struct FrameLet {
            
            let length:Double?
            init(fromBreadth breadth:Double){
                //尽管 length 属性现在是常量,我们仍然可以在其构造器中设置它的值
                //常量length的值被修改成(breadth * 10)
                length = breadth * 10
            }
            
            init(_ area:Double){
                //尽管 length 属性现在是常量,我们仍然可以在其构造器中设置它的值
                //常量length的值被修改成area
                length = area
            }
        }
    

    调用

    func FrameLetFunc(){
            let rectLength = FrameLet(fromBreadth: 15)
            print("长度为:\(rectLength.length)")
            
            let rectLen = FrameLet(18.0)
            print("长度为:\(rectLen.length)")
        }
    

    调用结果

    长度为:Optional(150.0)
    长度为:Optional(18.0)
    

    默认构造器

    默认构造器会简单的创建一个所有属性值都设置为默认值的实例

    类的逐一成员构造器

    //默认构造器
    //ShoppingListItem类中的所有属性都有默认值,且它是没有父类的基类,将自动获得一个可以为所有属性设置默认值的默认构造器
        class ShoppingListItem {
            
            var name:String?
            var quantity = 1;
            var unitPrice = 15.0
            var purchased = false
        }
    

    调用

    func shoppingFunc() {
            var item = ShoppingListItem()
            print("名字:\(item.name)")
            print("数量:\(item.quantity)")
            print("单价:\(item.unitPrice)")
            print("是否已付款:\(item.purchased)")
        }
    

    调用结果

    名字:nil
    数量:1
    单价:15.0
    是否已付款:false
    

    结构体的逐一成员构造器

    结构体对所有的存储型属性提供了默认值且自身没有定义定制的构造器,它们能自动获得一个逐一成员构造器

    在调用逐一成员构造器时,通过与成员属性名相同的参数名进行传值来完成对成员属性的初始赋值

    //结构体的逐一成员构造器
        struct Rect {
            var length = 100.0,breadth = 80.0
        }
    

    调用

    func rectFunc(){
            //由于length、breadth这两个存储型属性都有默认值,结构体 Rect 自动获得了一个逐一成员构造器 init(length:height:)。 就可以用它来为 breadth 创建新的实例。
            let area = Rect(length: 10.0, breadth: 5.0)
            print("矩形面积:\(area.length*area.breadth)")
        }
    

    调用结果

    矩形面积:50.0
    

    \color{gray}{欢迎大佬儿来指正纠错,共同学习😏!!}

    相关文章

      网友评论

          本文标题:iOS开发 - 「Swift 学习」Swift的构造过程(二)

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