2016-05-29 8 views
-1

Die Arrays stockPriceDate1..4 werden im gesamten Code identisch verwendet. Erhalte L-Wert-Fehler bei den letzten zwei Einträgen. Es ist meine Liste Interpunktion, die ich falsch verstanden habe?Swift - Ausdruck wird in einen nicht verwendeten l-Wert aufgelöst

func sChart(chart: ShinobiChart!, dataPointAtIndex dataIndex: Int, forSeriesAtIndex seriesIndex: Int) -> SChartData! { 
    return seriesIndex == 0 ? 
     stockPriceData1[dataIndex]: 
     stockPriceData2[dataIndex]; 
     stockPriceData3[dataIndex]; <- Expression resolves error... 
     stockPriceData4[dataIndex]  <- Expression resolves error... 
} 

Antwort

2

Lassen Sie uns Ihren Code neu schreiben anders:

return seriesIndex == 0 ? stockPriceData1[dataIndex] : stockPriceData2[dataIndex] 

let _ = stockPriceData3[dataIndex] 
let _ = stockPriceData4[dataIndex] 

Beachten Sie, dass der Rückgabewert entweder stockPriceData1 oder stockPriceData2 ist. Die nächsten zwei Indizes in stockPriceData3 und stockPriceData4 werden ignoriert, da Sie ihre Ergebnisse nicht verwenden.

Der Code tut definitiv nicht, was Sie denken, dass es tut. Wenn Sie seriesIndex verwenden möchten, um das richtige Datenarray zu erhalten, möchten Sie switch verwenden, z.

switch seriesIndex { 
    case 0: 
     return stockPriceData1[dataIndex] 
    case 1: 
     return stockPriceData2[dataIndex] 
    case 2: 
     return stockPriceData3[dataIndex] 
    case 3: 
     return stockPriceData4[dataIndex] 
    default: 
     return nil // should never happen 
} 

oder ein Array verwenden:

let data = [stockPriceData1, stockPriceData2, stockPriceData3, stockPriceData4] 
return data[seriesIndex][dataIndex] 
+0

Sie sind richtig in beiden Punkten - vielen Dank. –

Verwandte Themen