Swift 斯威夫特:为什么';我不能在这里加两个整数吗?

Swift 斯威夫特:为什么';我不能在这里加两个整数吗?,swift,integer,Swift,Integer,我是斯威夫特的新手。我在Xcode中使用Swift 3.x。在努力从一个出口获取信息后,我终于克服了大部分错误,现在我遇到了有史以来最奇怪的事情。我怎么能不求2个整数的和 目标:与Swift/XCode进行蒙特卡罗集成。 伪代码:I=(区间)*(1/抽样)*和[f(x)](从n=1到n=抽样) 守则: @IBOutlet weak var interval_a: NSNumber! @IBOutlet weak var interval_b: NSNumber! @IBOutlet weak v

我是斯威夫特的新手。我在Xcode中使用Swift 3.x。在努力从一个出口获取信息后,我终于克服了大部分错误,现在我遇到了有史以来最奇怪的事情。我怎么能不求2个整数的和

目标:与Swift/XCode进行蒙特卡罗集成。 伪代码:
I=(区间)*(1/抽样)*和[f(x)](从n=1到n=抽样)

守则:

@IBOutlet weak var interval_a: NSNumber!
@IBOutlet weak var interval_b: NSNumber!
@IBOutlet weak var sample_size: NSNumber!


@IBAction func calcMCIntegration(_ sender: Any) {

    let interval_a_int: Int = interval_a.intValue
    let interval_b_int: Int = interval_b.intValue
    let sample_size_int: Int = sample_size.intValue
    var c: Int = 0
    var mc_int: Double = 0.0
    var rand_numb: Int = 0
    var func_sum: Int = 0       

    c = interval_b_int - interval_a_int

    for i in 1...sample_size_int {

        rand_numb = arc4random_uniform(UInt32(c)) + UInt32(interval_a_int)

        function_val = exp(rand_numb)

        func_sum += function_val

    }

    mc_int = c*func_sum/sample_size

    return mc_int

}

我发现,Swift错误消息可能毫无价值,甚至具有误导性。忽略特定消息。你必须自己找出问题所在


如果
c
rand\u numb
interval\u a\u int
都是类型
int
,那么您的代码应该编译。我尝试了不同类型的这些值的各种排列,但无法获得您显示的错误消息,但当它们都是类型
Int
时,它会编译。仔细检查所有3个变量/常量的类型。

我发现Swift错误消息可能毫无价值,甚至会产生误导。忽略特定消息。你必须自己找出问题所在


如果
c
rand\u numb
interval\u a\u int
都是类型
int
,那么您的代码应该编译。我尝试了不同类型的这些值的各种排列,但无法获得您显示的错误消息,但当它们都是类型
Int
时,它会编译。仔细检查所有3个变量/常量的类型。

其他人怎么说,这个消息有点棘手

两个UInt32之和将生成另一个UInt32。不能将其分配给Int变量

更改变量的类型,或强制转换求和结果

就你而言:

 rand_numb = Int(arc4random_uniform(UInt32(c))) + interval_a_int

其他人怎么说,这个信息有点棘手

两个UInt32之和将生成另一个UInt32。不能将其分配给Int变量

更改变量的类型,或强制转换求和结果

就你而言:

 rand_numb = Int(arc4random_uniform(UInt32(c))) + interval_a_int

这有点晚了,考虑到这个问题的优雅答案,我将他的Int扩展名转换为Swift 3:

extension Int {
    static func random(_ range: Range<Int> ) -> Int
    {
        var offset = 0

        if range.lowerBound < 0   // allow negative ranges
        {
            offset = abs(range.lowerBound)
        }

        let mini = UInt32(range.lowerBound + offset)
        let maxi = UInt32(range.upperBound   + offset)

        return Int(mini + arc4random_uniform(maxi - mini)) - offset
    }
}

这有点晚了,考虑到这个问题的优雅答案,我将他的Int扩展名转换为Swift 3:

extension Int {
    static func random(_ range: Range<Int> ) -> Int
    {
        var offset = 0

        if range.lowerBound < 0   // allow negative ranges
        {
            offset = abs(range.lowerBound)
        }

        let mini = UInt32(range.lowerBound + offset)
        let maxi = UInt32(range.upperBound   + offset)

        return Int(mini + arc4random_uniform(maxi - mini)) - offset
    }
}

请发布代码(一个独立的可复制示例),而不是屏幕截图。您正在将
C
转换为
UInt32
,然后尝试将其转换为常规整数。删除
UInt32
,它应该会修复它,您不需要强制转换为int。还要确保
rand_num
声明为
var
而不是
let
为什么您的三个
NSNumber
属性设置为outlet?为什么它们很弱?@rmaddy为什么我不能在那里使用
NSNumber
?我没有质疑
NSNumber
的使用。我质疑它们为什么是出口和薄弱环节。请发布代码(一个独立的可复制示例),而不是屏幕截图。您正在将
C
转换为
UInt32
,然后尝试将其转换为常规整数。删除
UInt32
,它应该会修复它,您不需要强制转换为int。还要确保
rand_num
声明为
var
而不是
let
为什么您的三个
NSNumber
属性设置为outlet?为什么它们很弱?@rmaddy为什么我不能在那里使用
NSNumber
?我没有质疑
NSNumber
的使用。我质疑它们为什么是出口和薄弱环节。问题是,行
rand\u numb=arc4random\u uniform(c)+interval\u a\u int
抛出了一个错误,指出
c
必须是
UInt32
-这就是我这样做的原因。问题是行
rand\u numb=arc4random\u uniform(c)+interval_a_int
抛出一个错误,指出
c
必须是
UInt32
类型-这就是我这样做的原因。