您的位置:首页 > 移动开发 > Swift

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: