13--swift之构造方法

1.构造器闭包

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

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


2。自定义构造器spa

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

class buy {orm

var a:Int对象

var b:String!ip

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

self.a = a1it

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()

相关文章
相关标签/搜索