Optionals in Swift: They are like pointers, but they are not pointers. If you pretend that they're pointers, you'll get it right 90% of the time. An optional variable is allowed to be nil (the null pointer). So, an Int? can be 5 or 12 or -3, but it can also be nil. A regular Int cannot be nil. If x is an Int? variable and you have to pass it into a method that requires a Int variable, you will pass it in as x! . The ! is a guarantee that x won't be nil, since the method you're calling requires that it not be nil. If you lied, and x is nil, x! will crash your program. You can "think of" Int? as a pointer to Int, and you can think of x! as the integer that x points to. But that's not exactly right because in Swift, all variables are pointers anyway.