// 存在迴圈引用的問題
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...