Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法为类型为';[双倍]';迅速地_Swift_Matrix_Subscript - Fatal编程技术网

Swift 无法为类型为';[双倍]';迅速地

Swift 无法为类型为';[双倍]';迅速地,swift,matrix,subscript,Swift,Matrix,Subscript,我使用Swix在Swift中创建矩阵。我使用x值列表形成矩阵。当我的x值列表是一个整数列表时,这不是一个问题,但是当我尝试在x值列表中使用十进制数时,我得到错误“无法为“[Double]”类型的值下标”。这是我的密码: @IBAction func button(sender: UIButton) { let x_values = [3.629, 2, 3] let y_values:[Double] = [4, 8, 16] // Counters for loops

我使用Swix在Swift中创建矩阵。我使用x值列表形成矩阵。当我的x值列表是一个整数列表时,这不是一个问题,但是当我尝试在x值列表中使用十进制数时,我得到错误“无法为“[Double]”类型的值下标”。这是我的密码:

@IBAction func button(sender: UIButton) {
    let x_values = [3.629, 2, 3]
    let y_values:[Double] = [4, 8, 16]

    // Counters for loops
    var columns = 0
    var x_parse = 0

    // Create Swix matrix
    var mat = eye(x_values.count)

    // Assign values to matrix from x_values
    while columns < x_values.count {
        var rows = x_values.count - 1
        var exponent = x_values.count
        while rows > -1 {
            let element = x_values[x_parse] ^^ exponent

            mat[columns, rows] = element
            rows = rows - 1
            exponent = exponent - 1
        }
        columns = columns + 1
        x_parse = x_parse + 1
    }
    let y_ndarray = asarray(y_values)
    let solution = solve(mat, b: y_ndarray)
    print(String(solution))
    print(solution)
    print(label.text = String(solution))
}
突出显示x_值作为问题

定义^^运算符的代码为:

infix operator ^^ { }
func ^^ (radix: Int, power: Int) -> Int {
    return Int(pow(Double(radix), Double(power)))
}

如果我的列表中包含双精度的值,我应该如何访问它?

这个问题似乎是由^^运算符的定义引起的。我用找到的另一个代码片段替换了定义^^运算符的代码。新的操作员定义是:

infix operator ** { associativity left precedence 170 }

func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}
当我将我的x_值作为一个双倍列表时,它就起作用了:

let x_values:[Double] = [3.629, 3.561, 3.527]
并更新我的代码,如下所示:

let element = x_values[x_parse] ** exponent

现在一切似乎都正常工作。

您能告诉我们如何在Swix中定义
^
运算符(或者这是您自己定义的运算符吗?)?这似乎是一个典型的模糊错误:错误的真正来源很可能不是试图索引
x_值
,而是在lhs
x_值
(type
[Double]
)和rhs
指数(type
Int
)上使用
^
。Swift标准库中没有
^
运算符,这必须是自定义的。对我上面的评论进行小调“编辑”:“…在lhs
x_值[x_解析]
(type
Double
)和rhs
指数(type
Int
)上使用
^
”@MartinR:他简单地提到了,所以可能在那里定义了一个操作符(尽管我找不到)。@dfri我忘了提到我在代码前面定义了一个^^操作符。这是一个指数运算符。@dfri指数运算符到目前为止一直工作正常。我还尝试使用Swift'double(exponent)'提供的double函数将rhs'exponent'转换为double,但得到了相同的错误。
let element = x_values[x_parse] ** exponent