13--swift之构造方法

1.构造器

也叫构造函数,为了初始化类和结构体等类型的实例属性,关键字是initinit为默认构造器,类里面所有的非lazy的存储属性必须都有初始值,可以通过带有缺省值来初始化属性,也可以用init来初始化。析构器与构造器相反,在对象释放时调用,关键字是deinit

语法:init(参数列表){初始化代码}


2。自定义构造器

带有参数的构造方法,参数的个数,循序都任意

class buy {

var a:Int

var b:String!

init(aa a1:Int,bb b1:String){

self.a = a1

self.b = b1

}

}

var b = buy(aa: 2, bb: "book")//init就是自定义构造器

3.析构器

析构器只能用于类类型

class Person {

let name: String

init(name: String){

self.name = name

print("\(name)init" )

}

deinit{

print("\(name)deinit")

}

}

//var p1 = Person(name: "tom")

//print(p1.name)//只调用init

//要想调用deinitp1必须是person可选类型,而且必须置空,如下

var p1: Person? = Person(name: "tom")

print(p1!.name)

p1 = nil//自动调用deinit

注意:deinit不适用于结构体,枚举

class Animal {

init(){

print("animal init")

}

deinit{

print("animal deinit")

}

}

class Dog: Animal {

override init(){

print("dog init")

}

deinit{

print("dog deinit")

}

}

//var a: Animal? = Animal()

//a = nil

//


var d: Dog? = Dog()

d = nil

4.可选值存储属性可以在构造方法中不进行初始化,默认为空nil

5.针对结构体,系统会默认提供一个成员逐一构造器


struct Rect {

var w: Double//init可省略

var h: Double

}

var r = Rect(w: 2.0, h: 4.0)

6.值类型的构造器代理

就是构造方法之间的相互调用

struct Segment {

var origin: Double

var end: Double

init(origin: Double,end: Double){

self.origin = origin

self.end = end

}

init(){

//        origin = 0.0

//        end = 0.0

self.init(origin: 0.0,end: 0.0)

}

init(origin: Double,length: Double){

//        self.origin = origin

//        self.end = origin + length

self.init(origin: origin,end: origin + length)

}

func description()->String{

return "\(origin),\(end)"

}

}

var s = Segment(origin: 2.0, end: 2.0)

var s1 = Segment()

var s2 = Segment(origin: 2.0, length: 2.0)


print(s.description())

print(s2.description())


7.闭包或者全局函数或者当前类的类方法设置存储属性的缺省值


func GetValue()->Int{

return 10

}

class TestClass {

var x: Int = {()-> Int in

print("初始化开始")

sleep(4)

return 10

}()//将闭包执行过后的值作为缺省值赋给x,注意闭包后要加(),不加的话就是把闭包赋值给x了,没有意义

init(){

print("初始化完毕")

}

var z:Int = GetValue()//通过确据函数来设置缺省值

class func classGetValue()->Int {

print("class get value")

return 10

}

var b: Int = TestClass.classGetValue()//通过类方法来设置缺省值

}

var o = TestClass()


你可能感兴趣的:(13--swift之构造方法)