other case on thisを確認しましたが、遅延型varはここで問題を解決していないようです。プロパティ初期化子内でインスタンスメンバーを使用できません
私はある種の方程式を解くために使用しています。一度解けば、私は元のコードViewController.swift
に戻って2つの配列を返したいと思います。コードは以下に示されていますが、私が実際にlet (dollars1, dollars2) = prob.solveUsingSolver(solver:solveEuler)
行で問題を解決しようとしている行にあります。私は当初、問題を解決したちょうどprob.solveUsingSolver(solver:solveEuler)
で遊び場でそれをテストしていました。しかし、主なアプリケーションでは、 "Expected declaration"エラーが出ています。私はdollars1
とdollars2
に出力を割り当てるようにしようと、私が手
プロパティ初期化子内のインスタンスメンバ「PROB」を使用することはできません。 「自己」の前に実行プロパティ初期化子が可能です
import Charts
class ViewController: UIViewController, ChartViewDelegate {
@IBOutlet weak var lineChartView: LineChartView!
override func viewDidLoad()
{
super.viewDidLoad()
// Solving the 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 for 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 HE {
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 i = 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 i < 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 an array of data entries
var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0 ..< space_dimensionless.count {
yVals1.append(ChartDataEntry(x: space_dimensionless[i], y: temp_hot[i]))
}
// 2 - create a data set with our array
let set1: LineChartDataSet = LineChartDataSet(values: yVals1, label: "Hot Fluid")
set1.axisDependency = .left // Line will correlate with left axis values
set1.setColor(UIColor.red.withAlphaComponent(0.5)) // our line's opacity is 50%
set1.setCircleColor(UIColor.red) // our circle will be dark red
set1.lineWidth = 2.0
set1.circleRadius = 0.0 // the radius of the node circle
set1.fillAlpha = 65/255.0
set1.fillColor = UIColor.red
set1.highlightColor = UIColor.white
set1.drawCircleHoleEnabled = false
// 3 - creating an array of data entries
var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0 ..< space_dimensionless.count {
yVals2.append(ChartDataEntry(x: space_dimensionless[i], y: temp_cold[i]))
}
// 4 - create a data set with our array
let set2: LineChartDataSet = LineChartDataSet(values: yVals2, label: "Cold Fluid")
set2.axisDependency = .left // Line will correlate with left axis values
set2.setColor(UIColor.blue.withAlphaComponent(0.5)) // our line's opacity is 50%
set2.setCircleColor(UIColor.blue) // our circle will be dark red
set2.lineWidth = 2.0
set2.circleRadius = 0.0 // the radius of the node circle
set2.fillAlpha = 65/255.0
set2.fillColor = UIColor.blue
set2.highlightColor = UIColor.white
set2.drawCircleHoleEnabled = true
//5 - create an array to 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 any resources that can be recreated.
}
}
私はそれを考えましたが、私は関数外のタプルが必要です。いくつかの点で 'return'を使って試しましたが、動作させることができませんでした。 –
私はそれに何を言うべきか分かりません。あなたが持っている場所にコードを置くことはできません。多分あなたの質問を編集して、あなたが試したコードを追加してください。 – Paulw11
今すぐ確認してください。主な問題は、上に近づいてくるソルバーラインです。let wholearray = HE(Th1:100.0、Tc2:25.0、deltaZ:0.1).solveUsingSolver(solver:solveEuler) 'は空の配列を返します。 '()'は予期しないものです。テスト中に同じことを 'HE(Th1:100.0、Tc2:25.0、deltaZ:0.1).solveUsingSolver(solver:solveEuler)'に割り当てずにプレイグラウンドで実行したときに、問題は解決しました。問題は実際のアプリケーションにあります。 –