Swift 學習筆記 類

2021-08-05 21:32:55 字數 4135 閱讀 3750

// 存在迴圈引用的問題

class

bankcard

class

user

解決迴圈引用:

在例項的生命週期中,如果某些時候引用沒有值,那麼弱引用可以避免迴圈強引用。如果引用總是有值,則可以使用無主引用。

1.弱引用,使用 weak 修飾

- 注意弱引用必須被宣告為變數,表明其值能在執行時被修改。

- 弱引用不能被宣告為常量。

- 弱引用不會保持所引用的例項,即使引用存在,例項也有可能被銷毀。因此,arc 會在引用的例項被銷毀後自動將其賦值為nil。

- 弱引用可以沒有值,你必須將每乙個弱引用宣告為可選型別

2.無主引用,使用 unowned 修飾

- 可以在宣告屬性或者變數時,在前面加上關鍵字unowned

- 無主引用是非可選型別,你不需要在使用它的時候將它展開。無主引用總是可以被直接訪問。

- arc 無法在例項被銷毀後將無主引用設為nil,因為非可選型別的變數不允許被賦值為nil,因為非可選型別的變數不允許被賦值為nil。

- 注意如果你試圖在例項被銷毀後,訪問該例項的無主引用,會觸發執行時錯誤。使用無主引用,你必須確保引用始終指向乙個未銷毀的例項。還需要注意的是如果你試圖訪問例項已經被銷毀的無主引用,swift 確保程式會直接崩潰,而不會發生無法預期的行為。所以你應當避免這樣的事情發生。

class

ios}

class

android

}var stu1 = ios.student()

var stu2 = android.student()

// stu1/stu2是兩個不同的物件

class

ios}

var stu1 = ios.student()

stu1.name = "li"

var stu2 = stu1

stu2.name = "wang"

print(stu1.name) // wang

class

ios}

class

android

}var stu1 = ios.student()

var stu2 = android.student()

print(stu1 === stu2) // false

class ios:nsobject

}var ios1 = ios()

var ios2 = ios()

var dict:dictionarystring> = [ios1:"hello",ios2:"hi"]

struct class 

class

student

var stu = student()

stu.classinfo.numberofperson = 200

// 不可以更改

stu.classinfo = class() // 不可以更改

class

class

class

student

var stu = student()

stu.classinfo.numberofperson = 200

print(stu.classinfo.numberofperson) // 200(可以更改)

stu.classinfo = class() // 不可以更改

class student

}var stu = student(name: "wang", age: 28)

print(stu.name) // wang

class

cityinfo

}class

metro

var line1 = metro()

line1.name = "一號線"

print(line1.name!) // 一號線

var city = line1.city

print("載入城市資訊") // 輸出「一號線」 10秒後輸出本語句

class

loginuser

var name:string

didset

}}var user = loginuser(name: "wang")

/* 使用初始化方法,不會呼叫屬性值觀察

對屬性值進行修改,將會呼叫屬性值觀察

*/ user.name = "li"

// 新值:li

// 值:wang

class

square

set}

}var square = square()

square.round = 40

print(square.width) // 10

class

classroom

print(classroom.maxofnumber) // 10

class

tool

}tool.share()

class

tool

class

func

sharedtool() -> tool

return toolparmars.tool!

}}var tool = tool.sharedtool()

tool.toolname = ""

var tool2 = tool.sharedtool()

print(tool2.toolname) //

class

testclass

set}

}var test = testclass()

test[2] = "hello"

test[12] = "world"

print(test.testdict)

// [2: "hello", 12: "world"]

// 學生類

class

student

}// 班級類

class

classroom

subscript(stuid:int)->student

set

}}// 學校類

class

school

set}

// 根據班號查詢班級

subscript(classid:int) -> classroom

set}

}var phone100 = school()

// 對學校內所有的班級

for classid in

1...20

phone100[classid] = classroom

}print(phone100[10,130].name)

var maxnumberofprovice = 300

var maxnumberofcity = 40

// 城市類

class

city

}// 省份類

class

province

subscript(cityid:int)->city

set}

}// 國家類

class

country

set}

subscript(provinceid:int)->province

set}

}var country = country()

for provinceid in

1...maxnumberofprovice

country[provinceid] = provice

}print(country[3,306].cityname)

Swift學習筆記九 類 Class

person 類沒有 初始化器 s,建構函式可以有多個,預設是 initclass person nsobject 過載 函式名相同,會是引數和個數不同 過載可以給自己的屬性從外部設定初始值 init name string class person nsobject 重寫父類的方法 overrid...

swift學習筆記

1 值永遠不會被隱式轉換為其他型別。如果你需要把乙個值轉換成其他型別,請顯式轉換。let label the width is let width 94 let widthlabel label string width could not find an overload for that acc...

Swift學習筆記

常量 let product constant iphone6 變數 var product var ipad 不需要宣告變數型別,會根據右側的值推導左側變數的型別 可以多個變數定義在一起 var x1 30,x2 abc 可以精確指定變數的型別 var x1 int 27 指定x1為int型 pr...