【问题标题】:Saving UInt32 Values Into NSUserDefaults (Swift 2.0) error将 UInt32 值保存到 NSUserDefaults (Swift 2.0) 错误
【发布时间】:2015-09-15 15:17:56
【问题描述】:

我对 Swift 2.0 还很陌生,而且我很困在这里...... 我根据用户设置的上下限范围创建了一个随机数生成器。当我可以将低和高的变量设置为 Uint32 时,此函数与我的测试函数配合得很好 一旦我尝试将 NSUserDefaults 中的低/高范围存储为整数。现在,当我尝试加载用户为低和高设置的值以在下面的函数中使用时,它会给我一个错误,即它需要是 UInt32 值。

问题是....我似乎无法弄清楚如何将它们保存在 NSUser 中作为该类型。或者将其解包为来自 UserDefaults 的那种类型。

我的具体错误信息是... ERROR IS Binary Operator + 不能应用于 UInt32 和 In 类型的操作数

非常感谢您的帮助和时间,我真的很感激!你们这里真棒!

如果您还有什么需要请告诉我:)

 //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

【问题讨论】:

    标签: swift integer nsuserdefaults uint32


    【解决方案1】:

    对于任何想知道的人...感谢亚当,我们有一个答案...这是分解我如何使用他的建议使这件事起作用的代码:)

    //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)")
    

    【讨论】:

      【解决方案2】:

      使用此代码(为 swift 3 更新):

          let number : UInt32 = 8
      
          UserDefaults.standard.set(NSNumber(value: number), forKey: "key")
      
          let number2 = (UserDefaults.standard.value(forKey: "key") as? NSNumber)?.uint32Value
      

      【讨论】:

      • 看来这是个好主意!今天一有机会,我将尝试将此方法实施到我的应用程序中。非常感谢您的快速回复,我会尽快更新您!很兴奋!
      • 这就像一个魅力!完全工作和惊人的。感谢您的洞察力。我真的很感激。
      • 当数字超过 2^31 时,这将不适用于 32 位设备
      • @Mousavian 首先是UInt32。它永远不会比这更大。
      • 32 位设备 中的整数范围是 -2^31 到 2^31-1,而 UInt32 是 0 到 2^32。理论上 UInt32 可以有比 Int 更大的值
      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2013-04-16
      相关资源
      最近更新 更多