CakeGamesStudios
CakeGamesStudios

Reputation: 205

Saving UInt32 Values Into NSUserDefaults (Swift 2.0) error

I am very new to Swift 2.0 and am pretty stuck here... I have created a random number generator based off a user set range for low and high limits. This function worked great with my test function when I could set the variables for low and high to Uint32 Once I tried to store the low/high range in NSUserDefaults as an integer. Now when I try to load the values set by the user for the low and high to use in my function below it gives me the error that it needs to be a UInt32 value.

The problem is.... I cannot seem to figure out how to save them in NSUser as that type. Or unwrap it as that type coming out of the UserDefaults.

My specific error message is... ERROR IS Binary Operator + cannot be applied to operands of type UInt32 and In

Thanks so much ahead of time for your help and time I truly appreciate it! You guys are awesome here!

Let me know if there is anything else you need from me :)

 //CREATE SAVE SETTINGS FOR LOW AND HIGH RANGE
 NSUserDefaults.standardUserDefaults().integerForKey("CatLowRange")                       
 NSUserDefaults.standardUserDefaults().integerForKey("CatHighRange")

//Variables to load in values from NSUserDefaults on load
var catLowRange             = 0     //Load In Low Range From NSUser
var catHighRange            = 40    //Load In High Range From NSUser

//LOAD IN VALUES TO VARIABLES FROM NSUSERDEFAULTS

catLowRange = NSUserDefaults.standardUserDefaults().integerForKey("CatLowRange")

catHighRange = NSUserDefaults.standardUserDefaults().integerForKey("CatHighRange")

**//My Function To Generate RandNumber...** 
*ERROR IS Binary Operator + cannot be applied to operands of type UInt32 and Int*
randomNumber = arc4random_uniform (catHighRange - catLowRange) + catLowRange

Upvotes: 0

Views: 662

Answers (2)

Adam
Adam

Reputation: 26917

Use this code (updated for swift 3):

    let number : UInt32 = 8

    UserDefaults.standard.set(NSNumber(value: number), forKey: "key")

    let number2 = (UserDefaults.standard.value(forKey: "key") as? NSNumber)?.uint32Value

Upvotes: 0

CakeGamesStudios
CakeGamesStudios

Reputation: 205

For anyone wondering... Thanks to Adam we have an answer... Here is the code broken down how I used his suggestion to make this thing work :)

//WORKING METHOD!?
    //vars for use
    let catLowRange         : UInt32    = 0
    let catHighRange        : UInt32    = 40

    var randNumGenerated    : UInt32    = 0

    //SAVEPOINTS (STEP 1 - save the UInt32s as int for saving)
    NSUserDefaults.standardUserDefaults().setInteger(Int(catLowRange), forKey: "CatLowRange")
    NSUserDefaults.standardUserDefaults().setInteger(Int(catHighRange), forKey: "CatHighRange")

    //LOAD (STEP 2 - Take Int save as a UInt32 now)
    let catLowRangeLoad = UInt32(NSUserDefaults.standardUserDefaults().integerForKey("CatLowRange"))
    let catHighRangeLoad = UInt32(NSUserDefaults.standardUserDefaults().integerForKey("CatHighRange"))

    //FUNCTION TEST
    randNumGenerated = arc4random_uniform (catHighRangeLoad - catLowRangeLoad) + catLowRangeLoad

    //CHECK
    print ("catLowRange = \(catLowRange)")
    print ("catLowRangeLoad = \(catLowRangeLoad)")
    print ("catHighRange = \(catHighRange)")
    print ("catHighRangeLoad = \(catHighRangeLoad)")
    print ("randNumGen = \(randNumGenerated)")

Upvotes: 1

Related Questions