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

iOS开发 - 「Swift 学习」Swift的构造过程(值类型

作者: 俺不是大佬儿 | 来源:发表于2022-03-10 09:16 被阅读0次

值类型的构造器代理

构造器通过调用其它构造器来完成实例的部分构造过程称为构造器代理,能够减少多个构造器间的代码重复

构造器的代理规则:

值类型 类类型
不支持继承,所以构造器代理的过程相对简单,因为它们只能代理给本身提供的其它构造器。 你可以使用self.init在自定义的构造器中引用其它的属于相同值类型的构造器。 可以继承自其它类,这意味着类有责任保证其所有继承的存储型属性在构造时也能正确的初始化。
//值类型的构造器代理
class ConstructorAgent{
    
    struct Size {
        var width = 0.0,height = 0.0
    }
    
    struct Point {
        var x = 0.0, y = 0.0
    }
    
    struct Rect {
        var origin = Point()
        var size = Size()
        init(){}
        init(origin:Point, size:Size){
            self.origin = origin
            self.size = size
        }
        init(center:Point, size:Size){
            let originX = center.x - (size.width/2.0)
            let originY = center.y - (size.height / 2.0)
            //将新值 调用(或代理给)init(origin:size:)构造器
            self.init(origin: Point(x: originX, y: originY), size: size)
        }
        
        var x: Double {
            get {
                origin.x
            }
        }
        
        var y: Double {
            get
            {
                origin.y
            }
        }
    }
}

调用

func constructorAgentFunc(){
        
        //origin和size属性都使用定义时的默认值
        let basicRect = Rect()
        print("size 初始值:\((basicRect.size.width, basicRect.size.height))")
        print("origin 初始值:\((basicRect.x, basicRect.y))")
        
        //调用origin构造器 将origin和size的参数值赋给对应的存储型属性
        let originRect = Rect(origin: Point(x: 10, y: 10), size: Size(width: 20, height: 20))
        print("size 新值:\((originRect.size.width,originRect.size.height))")
        print("origin 新值:\((originRect.origin.x,originRect.origin.y))")
        
        //通过center构造器利用size值计算出origin坐标值
        //调用(或代理给)init(origin:size:)构造器来将新的origin和size值赋值到对应的属性中
        let centerRect = Rect(center: Point(x: 18.0, y: 20.0), size: Size(width: 8.0, height: 8.0))
        print("size 新值:\((centerRect.size.width,centerRect.size.height))")
        print("origin 新值:\((centerRect.origin.x,centerRect.origin.y))")
        
    }

调用结果

size 初始值:(0.0, 0.0)
origin 初始值:(0.0, 0.0)
size 新值:(20.0, 20.0)
origin 新值:(10.0, 10.0)
size 新值:(8.0, 8.0)
origin 新值:(14.0, 16.0)

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

相关文章

网友评论

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

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