繁体   English   中英

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

[英]Swift: Convert Int to UInt32, and how to unwrap optional

我很快就觉得很陌生,我只是想建立一些东西来测试水域。 这与我以前的问题有关。 我正在构建一些代码以从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,在注释中使用答案,但是在展开可选内容时遇到问题。 我在强制展开可选项时做错什么了吗?

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

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

通过列出数据类型(在这种情况下为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语句将始终为true,因为您将参数“ high”的值覆盖为UInt32的0。但是,我可能是错的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM