Swift-构造方法

来源:互联网 发布:江苏十一选五遗漏数据 编辑:程序博客网 时间:2024/05/17 00:17

构造方法

/*  1、构造方法    构造方法主要作用:实例对象的内容的初始化(给存储属性设置初始值)    隐式调用    Swift要求类或者结构体中的存储属性在对象构造完毕后要有初始值    构造方法的语法:    init(参数列表)    {        初始化代码    } */print("1、构造方法")/* 2、带有缺省值的构造方法   构造完一个对象之后,要求对象中的所有非lazy的存储属性必须要有初始值 *//* 3、带有参数的构造方法(构造方法的内部参数默认也作为外部参数) */class MyPoint {         //class(类)//    var x:Int = 0//存储属性    var x:Int    var y:Int    func descript() -> String{        return("x=\(x),y=\(y)")    }    //构造方法的内部参数默认也作为外部参数    init(_ x:Int,y:Int) {        self.x = x        self.y = y    }//    //构造方法语句//    init() {//        y = 0//    }}//构造一个对象:(1)给对象分配内存(2)初始化这块内存(构造方法)var p = MyPoint(10,y:5)print("\(p.descript())")//显式调用/* 4、常量存储属性与构造方法    常量存储属性只能在构造方法中被修改,其他任何时候都不可以修改 *//* 5、可选属性与构造方法(可选存储属性可以再构造方法中不进行初始化,nil) */print("\n5、可选属性与构造方法")class Card {    let cardNumber:UInt32    init(number:UInt32) {        self.cardNumber = number    }}//可选存储属性可以再构造方法中不进行初始化,nilclass Human {    let name:String    var age:Int    var card:Card?    //构造方法的内部参数默认也作为外部参数    init(name:String,age:Int){        self.name = name        self.age = age//        self.card = Card(number:4554445)    }}var person = Human(name:"zhang",age:10)print("name=\(person.name),age=\(person.age)")person.age = 5//person.name = "san"/* 6、结构体的构造方法总结 */print("\n6、结构体的构造方法总结")struct Rect {       //struct(结构体)    var width:Double    var height:Double//    init(width:Double,height:Double) {//        self.width = width//        self.height = height//    }    //若果我们自定义了相应的构造方法,那么系统提供的结构体逐一成员构造方法将会失效    init() {        width = 0        height = 0    }}//针对结构体,系统会提供一个成员逐一构造器(类中没有成员逐一构造器)var rect = Rect()/* 7、值类型的构造器代理(构造方法之间的相互调用)    构造方法可以调用其他构造方法来完成实例的构造,称之为构造器代理    好处:减少构造方法之间的代码重复 */print("\n7、值类型的构造器代理")struct Segment {    var origin:Double    var end:Double    init(origin:Double,end:Double) {        self.origin = origin        self.end = end    }    init() {//        origin = 0//        end = 0        self.init(origin:0,end:10)    }    init(origin:Double,length:Double) {//        self.origin = origin//        self.end = origin + length        self.init(origin:0,end:origin+length)    }    func description() -> String {        return "\(origin),\(end)"    }}var seg1 = Segment(origin:0,end:10)var seg2 = Segment()var seg3 = Segment(origin:0,length:5)print(seg1.description())print(seg2.description())print(seg3.description())/* 8、闭包或者全局函数设置存储属性的缺省值 */print("\n8、闭包或者全局函数设置存储属性的缺省值")func getValue() -> Int{    print("全局函数")    return 10}class TestCalss{    //x是存储属性    var x:Int = {        () -> Int in        print("初始化开始")        sleep(5)        return 10    }()//此处加括号执行闭包        //通过全局函数设置缺省值    var z:Int = getValue()        //通过类方法设置缺省值(必须是类方法,不能是普通方法)    var p:Int = TestCalss.classGetValue()    class func classGetValue() -> Int {        print("类方法")        return 10    }        //y是计算属性    var y:Int{        return x < 100 ? x : 100    }    init() {        print("初始化完毕")    }}var obj = TestCalss()


2 0
原创粉丝点击