Swift:将Int转换为UInt32,以及如何解包可选

时间:2016-03-31 15:46:49

标签: ios swift int range uint32

我非常喜欢迅速,我只想尝试建立一些东西来测试水域。这与我之前的一个问题有关。我正在构建一些代码来从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
}

编辑:转换的UInt,在评论中使用答案,但是在解开选项时出现问题。 我是否因为强行打开选项而做错了什么?

2 个答案:

答案 0 :(得分:0)

let viewController =  ViewController()
var x = ViewController().rangeInput
var number = arc4random_uniform(UInt32(x!)) // <----- UInt32 conversion

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

答案 1 :(得分:0)

通过列出数据类型(本例中为UInt32),然后是包含参数的括号,在swift中调用初始值设定项。对于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语句将永远为真,因为你将参数“high”的值覆盖到UInt32为0.我可能错了。