Swift

2016-03-30 26 views
0

'da '[Double]' türünde bir alt değer girilemiyor Swift'de matris oluşturmak için Swix'i kullanıyorum. Matrisimi bir x değerleri listesi kullanarak oluşturuyorum. X değerleri listemi tamsayıların bir listesi olduğunda bu bir sorun değildi, ancak x değerleri listemde ondalık sayıları kullanmaya çalıştığımda "Abonelik '[Double]' türünde bir değer olamaz" hatası alıyorum.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)) 
} 

konu satırında ortaya çıktı:

let element = x_values[x_parse] ^^ exponent 

x_values ​​konu olarak vurgulayarak İşte benim kodudur.

^^ operatörü tanımlayan kod şudur:

infix operator ^^ { } 
func ^^ (radix: Int, power: Int) -> Int { 
    return Int(pow(Double(radix), Double(power))) 
} 
o çiftler içeriyorsa listemden değerleri erişmek bileyim

?

+1

Bize, '^ ^' operatörünün Swix'te nasıl tanımlandığını gösterebilir misiniz (veya bu, kendinizin tanımladığınız bazı operatördür?)? Bu, göze çarpan bir hatanın klasik bir örneği gibi görünüyor: hatanın asıl kaynağının büyük olasılıkla x_values'i indeksleme denemesi değil, lhs 'x_values'de' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '}) ve rhs 'üssü (tür' Int'). – dfri

+0

Swift standart kitaplığında '^^' operatörü yok, bu özel bir tanımlı olmalıdır. –

+0

Yukarıda yaptığım küçük "yorumu düzenle": _ "... lhs' x_values ​​[x_parse] '(' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '(' '' '' '' '' '' '' '' '' '' '' '' '' '' ''] 'i kullanın. @MartinR: [Swix] (https://github.com/stsievert/swix) 'den kısaca bahseder; – dfri

cevap

0

Sorun, ^^ işlecinin tanımından kaynaklanıyor gibi görünüyor. Ben ^^ işlecini tanımlayan kodu, bulduğum başka bir parçacıkla değiştirdim.

infix operator ** { associativity left precedence 170 } 

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

ve benim x_values ​​çiftlerde listesi yapmak zaman çalışıyor: yeni operatör tanımıdır

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

ve şöyle kodumu güncelleme:

let element = x_values[x_parse] ** exponent 

Her şey görünüyor şimdi düzgün çalışıyor olmak.