2016-03-30 14 views
0

kann kein Wert vom Typ '[Double]' angegeben werden. Ich verwende Swix zum Erstellen von Matrizen in Swift. Ich formiere meine Matrix mit einer Liste von x Werten. Das war kein Problem, wenn meine Liste von X-Werten eine Liste von Ganzzahlen war, aber wenn ich versuche, Dezimalzahlen in meiner Liste von X-Werten zu verwenden, erhalte ich den Fehler "Kann keinen Wert vom Typ '[Double]'" indizieren. Hier ist mein Code:In Swift

@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)) 
} 

Die Frage stellt sich in der Zeile:

let element = x_values[x_parse] ^^ exponent 

Hervorhebung x_values ​​ als Problem.

Der Code des ^^ Operator definieren ist:

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

Wie soll ich die Werte in meiner Liste zugreifen, wenn sie verdoppelt enthält?

+1

Können Sie uns zeigen, wie '^^' Operator in Swix definiert ist (oder ist das ein Operator, den Sie selbst definiert haben?)? Dies scheint ein klassischer Fall eines verschleierten Fehlers zu sein: Wo die wahre Quelle des Fehlers höchstwahrscheinlich nicht der Versuch ist, "x_values" zu indizieren, sondern die Verwendung von '^^' auf lhs 'x_values' (Typ' [Double] ') und rhs 'exponent' (Typ' Int'). – dfri

+0

In der Swift-Standardbibliothek gibt es keinen '^^' -Operator, dieser muss benutzerdefiniert sein. –

+0

Minor "edit" zu meinem Kommentar oben: _ "... Verwendung von' ^^ 'auf lhs' x_values ​​[x_parse] '(Typ' Double') und rhs 'exponent' (Typ' Int') "_. @MartinR: Er erwähnt kurz [Swix] (https://github.com/stsievert/swix), also möglicherweise einen dort definiert (obwohl ich es nicht finden kann). – dfri

Antwort

0

Es scheint, dass das Problem aus der Definition des Operators ^^ entstand. Ich ersetze den Code, der den Operator ^^ definiert, durch einen anderen Ausschnitt, den ich gefunden habe. Der neue Betreiber Definition lautet:

infix operator ** { associativity left precedence 170 } 

func ** (num: Double, power: Double) -> Double{ 
    return pow(num, power) 
} 

und es funktioniert, wenn ich meine x_values ​​eine Liste der Doppel machen:

let x_values:[Double] = [3.629, 3.561, 3.527] 

und meinen Code aktualisieren, wie so:

let element = x_values[x_parse] ** exponent 

Alles scheint jetzt richtig funktionieren.