Swift 可選鏈
可選鏈是一種用于調用屬性、方法和下標的過程,這些屬性、方法和下標可能當前為nil。愛掏網 - it200.com如果可選項有值,則屬性、方法或下標調用成功;如果可選項為nil,則屬性、方法或下標調用返回nil。愛掏網 - it200.com
您可以將多個查詢鏈接在一起,但如果鏈中的任何部分為nil,則整個鏈條將失敗。愛掏網 - it200.com
通過在調用屬性、方法或下標的可選值后面放置一個問號(?),可以指定可選鏈,如果可選項不為nil,則調用屬性、方法或下標。愛掏網 - it200.com
可選鏈 | 強制解包 |
---|---|
當可選項為nil時,可選鏈會失敗。愛掏網 - it200.com | 當可選項為nil時,強制解包會觸發運行時錯誤。愛掏網 - it200.com |
用?操作符放在可選值之后,調用屬性、方法或下標。愛掏網 - it200.com | 用!操作符放在可選值之后,強制解包值,調用屬性、方法或下標。愛掏網 - it200.com |
可選鏈的示例(在基類中未聲明值的情況下)
可選鏈的結果與預期的返回值相同,但封裝在可選類型中。愛掏網 - it200.com這意味著通過可選鏈訪問時,通常返回Int的屬性將返回Int?。愛掏網 - it200.com
讓我們舉一個示例來看看可選鏈和強制替代之間的區別:
使用?運算符的可選鏈程序
class Exam {
var student: Toppers?
}
class Toppers {
var name = "Intelligent"
}
let stud = Exam()
if let studname = stud.student?.name {
print("Student name is \(studname)")
} else {
print("Student name cannot be retrieved")
}
輸出:
Student name cannot be retrieved
在這里, Exam 是一個類名,包含了 student 作為成員函數。愛掏網 - it200.com子類被聲明為 Toppers ,名字是一個成員函數,它被初始化為” Intelligent “。愛掏網 - it200.com通過創建一個可選的實例”stud”來初始化對超類的調用。愛掏網 - it200.com
因為在基類中沒有聲明值,所以nil被存儲和由else處理程序塊顯示。愛掏網 - it200.com
用于可選鏈接和訪問屬性的模型類
當你必須聲明多個子類作為模型類時,它被使用。愛掏網 - it200.com它使你能夠定義復雜的模型,并訪問方法、屬性、下標、子屬性。愛掏網 - it200.com
示例
class rectangle {
var print: circle?
}
class circle {
var area = [radius]()
var cprint: Int {
return area.count
}
subscript(i: Int) -> radius {
get {
return area[i]
}
set {
area[i] = newValue
}
}
func circleprint() {
print("The number of rooms is \(cprint)")
}
var rectarea: circumference?
}
class radius {
let radiusname: String
init(radiusname: String) { self.radiusname = radiusname }
}
class circumference {
var circumName: String?
var circumNumber: String?
var street: String?
func buildingIdentifier() -> String? {
if circumName != nil {
return circumName
} else if circumNumber != nil {
return circumNumber
} else {
return nil
}
}
}
let rectname = rectangle()
if let rectarea = rectname.print?.cprint {
print("Area of rectangle is \(rectarea)")
} else {
print("Rectangle Area is not specified")
}
輸出:
Rectangle Area is not specified
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。