ios - Cannot use instance member within property initializer -


i have checked other case on this lazy var doesn't seem fix problem here.

i have code using solve equation and, once it's solved, want return 2 arrays answers original code in viewcontroller.swift. code given below but, @ line try solve problem let (dollars1, dollars2) = prob.solveusingsolver(solver:solveeuler) line. testing in playground prob.solveusingsolver(solver:solveeuler), solved problem. but, in main application, it's giving "expected declaration" error. , if try assign outputs dollars1 , dollars2,

cannot use instance member 'prob' within property initializer; property initializers run before 'self' available

import charts class viewcontroller: uiviewcontroller, chartviewdelegate {     @iboutlet weak var linechartview: linechartview!     override func viewdidload()     {         super.viewdidload()         // solving problem         let wholearray = he(th1: 100.0, tc2: 25.0, deltaz: 0.1).solveusingsolver(solver:solveeuler)         let temp_hot = wholearray.xarray         let temp_cold = wholearray.varray         // 1         self.linechartview.delegate = self         // 2         self.linechartview.chartdescription?.text = "tap node details"         // 3         self.linechartview.descriptiontextcolor = uicolor.white         self.linechartview.gridbackgroundcolor = uicolor.darkgray         // 4         self.linechartview.nodatatext = "no data provided"         // 5         setchartdata(space_dimensionless: space_dimensionless)     }     let space_dimensionless = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]     typealias solver = (double, double, double) -> (array<double>, array<double>)     struct {         var th1 = 0.0         var tc2 = 0.0         var deltaz = 0.0         init(th1: double, tc2: double, deltaz: double) {             self.th1 = th1             self.tc2 = tc2             self.deltaz = deltaz         }         func solveusingsolver(solver: solver) {             solver(th1, tc2, deltaz)         }     }     func solveeuler(th1: double, tc2: double, z : double) -> (xarray:array<double>, varray:array<double>)     {         var x = th1         var = 0.0         var upper = th1         var lower = tc2         var vold = (lower + upper) / 2         var v = vold         var xold = x         let epsilon = 0.05         var err = 1.0         var xarray: [double] = [0,1,2,3,4,5,6,7,8,9,10]         var varray: [double] = [0,1,2,3,4,5,6,7,8,9,10]         var j=0         while (err > epsilon) {             while < 1 {                 v -= 4*z*i*(xold-vold)                 x -= z*i*(xold-vold)                 xold = x                 vold = v                 i+=z                 xarray[j]=x                 varray[j]=v                 j += 1             }             err = abs(varray[10] - tc2)             if varray[10] > tc2 {                 upper = varray[0]             }             else {                 lower = varray[0]             }             x = th1             xold = x             vold = (lower + upper) / 2             v = vold             i=0.0             j=0         }         return (xarray,varray)     }     func setchartdata(space_dimensionless : [double]) {         // 1 - creating array of data entries         var yvals1 : [chartdataentry] = [chartdataentry]()         in 0 ..< space_dimensionless.count {             yvals1.append(chartdataentry(x: space_dimensionless[i], y: temp_hot[i]))         }         // 2 - create data set our array         let set1: linechartdataset = linechartdataset(values: yvals1, label: "hot fluid")         set1.axisdependency = .left // line correlate left axis values         set1.setcolor(uicolor.red.withalphacomponent(0.5)) // our line's opacity 50%         set1.setcirclecolor(uicolor.red) // our circle dark red         set1.linewidth = 2.0         set1.circleradius = 0.0 // radius of node circle         set1.fillalpha = 65 / 255.0         set1.fillcolor = uicolor.red         set1.highlightcolor = uicolor.white         set1.drawcircleholeenabled = false         // 3 - creating array of data entries         var yvals2 : [chartdataentry] = [chartdataentry]()         in 0 ..< space_dimensionless.count {             yvals2.append(chartdataentry(x: space_dimensionless[i], y: temp_cold[i]))         }         // 4 - create data set our array         let set2: linechartdataset = linechartdataset(values: yvals2, label: "cold fluid")         set2.axisdependency = .left // line correlate left axis values         set2.setcolor(uicolor.blue.withalphacomponent(0.5)) // our line's opacity 50%         set2.setcirclecolor(uicolor.blue) // our circle dark red         set2.linewidth = 2.0         set2.circleradius = 0.0 // radius of node circle         set2.fillalpha = 65 / 255.0         set2.fillcolor = uicolor.blue         set2.highlightcolor = uicolor.white         set2.drawcircleholeenabled = true         //5 - create array store our linechartdatasets         var datasets = [ichartdataset]()         datasets.append(set1)         datasets.append(set2)         let linechartdata = linechartdata(datasets: datasets)         //6 - set our data         linechartview.data = linechartdata         //7 format chart more         self.linechartview.xaxis.drawgridlinesenabled = false         self.linechartview.xaxis.labelposition = xaxis.labelposition.bottom         self.linechartview.xaxis.labelfont = uifont(name: "helveticaneue-light", size: 10.0)!         self.linechartview.xaxis.labeltextcolor = uicolor.black         self.linechartview.xaxis.drawaxislineenabled=true     }     override func didreceivememorywarning() {         super.didreceivememorywarning()         // dispose of resources can recreated.     } } 

you declaring 2 properties, prob , (dollars1, dollars2) tuple

let prob = he(th1: 100.0, tc2: 25.0, deltaz: 0.1) let (dollars1, dollars2) = prob.solveusingsolver(solver:solveeuler) 

but cannot use member of prob (the solveusingsolver function) @ point because self.prob won't have been initialised yet.

you want tuple assignment performed in function.

update

your solveusingsolver function invokes solver doesn't return value solver. should be:

func solveusingsolver(solver: solver) -> (array<double>, array<double>) {     return solver(th1, tc2, deltaz) } 

Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -