"Mars": 3.7, "Jupiter": 23.1, "Saturn": 9.0, "Uranus": 8.7, "Neptune": 11] let jupiterGravity: Double = planets["Jupiter"] //error: value of optional type 'Double?' not unwrapped let jupiterGravity: Double? = planets["Jupiter"] if jupiterGravity != nil { print("The gravity on Jupiter is " + "\(jupiterGravity!)") } else { print("Not a planet: Jupiter") } let plutoGravity: Double? = planets["Pluto"] if plutoGravity != nil { print("The gravity on Pluto is " + "\(plutoGravity!)") } else { print("Not a planet: Pluto") }
String let orbit: Orbit? } struct Orbit { let period: TimePeriod? let velocity: Double } struct TimePeriod { let value: Double? let units: String } planet.orbit!.period!.value! if let orbitPeriodValue = planet.orbit?.period?.value { ... } else { ... } 1 See Networking with Monads by John Gallagher @ Function Swift Conference 2014 http://2014.funswiftconf.com/speakers/ john.html