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

相關文章
相關標籤/搜索