A user default object can only be an instance (or a combination of
instances) of
NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary.
Some Swift types are automatically bridged to Foundation types,
e.g. Int, UInt, Float, Double and Bool are bridged
to NSNumber. So this could be saved in the user defaults:
var teamsData = Dictionary<String,Dictionary<String,Int>>()
On 64-bit architectures, Int is a 64-bit integer, but on
32-bit architectures, Int is a 32-bit integer.
The fixed-sized integer types such as Int64 are not
automatically bridged to NSNumber. This was also observed
in Swift - Cast Int64 to AnyObject for NSMutableArray.
Therefore, to store 64-bit integers in the user defaults you have
to use NSNumber explicitly:
var teamsData = Dictionary<String,Dictionary<String,NSNumber>>()
// Example how to add a 64-bit value:
let value : UInt64 = 123
teamsData["foo"] = ["bar" : NSNumber(unsignedLongLong: value)]