Swift-构造方法
2016-12-28 16:43
253 查看
构造方法
/* 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 } } //可选存储属性可以再构造方法中不进行初始化,nil class 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()
相关文章推荐
- Swift中的构造方法
- Swift 中 ViewController 默认构造方法不关联同名的xib文件
- 12.1 Swift构造方法初印象
- 12.6 Swift结构体的构造方法
- 12.5 Swift可选属性与构造方法
- IOS学习笔记05_1-Swift-如何定义类和类的构造方法、重载方法
- 13.5 Swift构造方法的编译器安全性检查
- Swift学习记录 -- 13.类的构造方法及属性监听
- 深入解析Swift编程中的构造方法
- 13.1 Swift指定构造方法和便利构造方法解析
- swift UIImageView构造方法
- Swift 基础学习(构造方法初印象)
- swift构造方法
- swift:字典转模型构造方法
- Swift中构造方法的解析
- 基于iOS开发对Swift构造方法的感悟
- swift自学笔记(六)(构造方法、析构方法)
- 14--swift之派生类构造方法
- 12.3 Swift带有参数的构造方法
- 13.4 Swift派生类构造方法的两段式构造