【问题标题】:Swift: Convert Int to UInt32, and how to unwrap optionalSwift:将 Int 转换为 UInt32,以及如何解包可选
【发布时间】:2016-07-20 04:19:51
【问题描述】:

我对 Swift 很陌生,我只是想构建一些东西来测试水域。这与我之前的一个问题有关。我正在构建一些代码来从 UITextField 对象获取用户输入,并且基本上我试图弄清楚如何将 Int 转换为 UInt32,但我没有在 SO 上搜索或以其他方式真正有帮助。

这是我的代码 //这是我调用用户输入的地方。

var rangeInput: Int? {
    get {
        return Int(rangeInputTextField?.text ?? "") 
    }

//这是我创建一个范围的函数,并在该范围之外调用一个随机数

  let viewController =  ViewController()
var x = ViewController().rangeInput
let y = (Int?(x!)) 
var number = arc4random_uniform(Int(y!))//ERROR OCCURS HERE "Cannot convert value of type 'Int' to expected argument type 'UInt32'

//MARK: Class for random number

struct RandomNumber {
    // numberRange to change the value for 1...X(user input)
    //creates the list to be picked from. (pickRandom)
   func numberRange(high:  UInt32) ->Range<UInt32>{

    if let high = UInt32?(0){
        print("Invalid number")
            } else { let high = Int(y!) + 1
        }
        let range = 1...high
       return range

    }
    //pick random number from that list

    let pickRandom = number
}

edit:转换的 UInt,在 cmets 中使用答案,但在展开选项时遇到问题。 我在强制解包选项方面做错了吗?

【问题讨论】:

  • UInt32(yourNumber)
  • @zcui93 在哪里?我要把它改成 arc4random_uniform(UInt32(Int(y!))) 还是什么?
  • 嗨@GabrielMSC,你可以这样做let unsignedY = UInt32(x)然后let usignedRandomNumber = arc4random_uniform(unsignedY)最后let number = Int(unsignedRandomNumber)
  • 嗨@neteot,那太好了,我测试了它,它仍然给我一个错误,发现 nil,同时打开一个可选值,所以我不确定是否有一些代码我可能需要添加或如何做到这一点

标签: ios swift int range uint32


【解决方案1】:
let viewController =  ViewController()
var x = ViewController().rangeInput
var number = arc4random_uniform(UInt32(x!)) // <----- UInt32 conversion

但是,建议检查用户输入x 和/或在UInt32 转换之后,以防用户输入不合理的内容,使用guardif let

【讨论】:

    【解决方案2】:

    通过列出数据类型(在本例中为 UInt32)后跟包含参数的括号来快速调用初始化程序。对于 Swift 中的大多数基本数据类型,初始值设定项都没有参数。因此,如果您想制作 Int、Float、Double、UInt32、String 等,只需这样做

    UInt32(Value)!//UInt32 can be substituted for any of the above values
    

    “!”解包可选值,如果该值不是数据类型的有效形式,则会在运行时导致错误,例如“解包可选值时意外发现 nil”,如果您想安全地执行此操作,您可以这样做

    if UInt32(Value) != nil {
        //Valid Value
    }else {
        //Invalid Value
    }
    

    这也与问题无关,但您的 if let 语句将始终为真,因为您将参数“high”的值覆盖为 0 的 UInt32。不过我可能是错的。

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 2014-10-24
      • 1970-01-01
      • 2022-11-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多