Objective-C Compatibility

Bridging between Swift and Obj-C

NSString                 <=> String
NSArray                  <=> Array<AnyObject>
NSDictionary             <=> Dictionary<NSObject, AnyObject>
Int, Float, Double, Bool  => NSNumber
NSNumber.intValue         => Int
NSNumber.doubleValue      => Double

Casting

Casting is still allowed

let length = (aString as NSString).length //.length is a NSString method
(anArray as NSArray).componentsJoinnedByString(NSString) //vjbs is a NSArray method

Property List

It is an AnyObject which is know to be a collection of objects which are only one of NSString NSArray NSDictionary NSNumber NSData NSDate

  • For passing data around "blindly"
  • Used for generic Data Structure

NSUserDefaults

NSUserDefaults is a storage for Property Lists. For persistent data which is kept after app relaunch

store / retrieve entire PropertyLists by name (keys)

setObject(AnyObject, forKey: String)  // Any Object must be a property list
objectForKey(String) -> AnyObject?
arrayForKey(String)  -> Array<AnyObject>? // returns nil if value is not set or not an array

store / retrieve little pieces of data

setDouble(Double, forKey: String)
doubleForKey(String -> Double) // not an optional, return 0 if no such key

Using NSUserDefaults

// Get default reader/writer
let defaults = NSUserDefaults.standardUserDefults()
// Read / Write
let plist: AnyObject = defaults.objectForKey(String)
defaults.setObject(AnyObject, forKey: String)
// It is autosave but you can synchonize
if !defaults.synchronize() {}