Intro
This is a category of study&¬es of swift, program and so on during the study of [Developing iOS8 Apps with Swift] on the iTunes U.
此系列为学习stanford课程:Developing iOS8 Apps with Swift过程中,对语言,程序设计,编程能力等部分的学习和记录。
Optional
The simple way to declare a optional value:
var testString: String?
It means: testString
is an optional value and if testString
has a value, it must be a string; if not, it is nil
. Notice:
- only optional value can be nil
- optional can be available for any type, such as class, scalar
- using
!
to unwrapped the optional value to get/set
From the above, for the normal var
, we don’t need to check like:
var testString: String = "demo"
if testString {
}
It will have an error.
nil is different from that in ObjC.
During the course, there is another way to declare optional:
@IBOutlet weak var label: UILabel!
The Paul
says it is called implicit optional value
. The difference of optional between using ? and ! only lies in usage, for example:
var label: UILabel?
label!.text!= label!.text! + digit
var label2: UILabel!
label2.text! = label2.text! + digit
//here, UILable's text is `text?`
optional chaining
In Book [The Swift Programming Language], there is a charpt Optional Chaining, it is :
Optional chaining is a process for querying and calling properties, methods, and subscripts on an optional that might currently be nil.
Just grab the example from the book:
if let johnsStreet = john.residence?.address?.street {
println("John's street name is \(johnsStreet).")
} else {
println("Unable to retrieve the address.")
}
// prints "Unable to retrieve the address.”
We can use ?
to get john
‘s optional property residence
‘s optional propery address
‘s optional property street
. That’s I think why it is called chaining
. Notice if address
is nil, it will go to the else
.
There is an important thing: any method,property called in the optional chaining
becomes the optional value event it is not defined as optional.
Why we need optional
In swift, nil
is not a value, and hence the normal var can’t have the value of nil
. But we do need leave the var empty(without value), and optional
comes for that.
Comments