In your ScubaViewController, the property data is initialized with an Array of 7 elements and it cannot be modified.
Thus, any of the conditions of your if-statements never get true.
You need to get the selected value from picker.
An example:
@IBAction func btnCalcClicked() {
let selectedRow = picker.selectedRow(inComponent: 0)
guard data.indices.contains(selectedRow) else {
print("selectedRow invalid")
return
}
let selectedData = data[selectedRow]
if selectedData == "Aluminum 100" {
fv = 0.47
} else if selectedData == "Aluminum 80" {
fv = 0.399
} else if selectedData == "Aluminum 63" {
fv = 0.319
} else if selectedData == "Aluminum 50" {
fv = 0.281
} else if selectedData == "Steel 120" {
fv = 0.526
} else if selectedData == "Steel 100" {
fv = 0.445
} else if selectedData == "Steel 72" {
fv = 0.42
}
consumptionAir = Double(((Double(plannedDepth.text!)! + 33)/33)) * 1.4
volumeAvailable = Double((Double(cylinderPSI.text!)! - mmP) / 14.7) * fv * cylN
allowedTime = volumeAvailable / consumptionAir
timeOutput.text = String(allowedTime) //Outputs the time allowed for the dive, in minutes, based on all factors input.
}
(I have renamed FV to fv, as in Swift, only type names start with Capital letter.)
But writing bunch of if-statements is not preferred.
I would write something like this:
class ScubaViewController: UIViewController {
//...
var fv: Double = 0.0
//...
let data = [ //Give this a better name than `data`...
(title: "Aluminum 100", fv: 0.47),
(title: "Aluminum 80", fv: 0.399),
(title: "Aluminum 63", fv: 0.319),
(title: "Aluminum 50", fv: 0.281),
(title: "Steel 120", fv: 0.526),
(title: "Steel 100", fv: 0.445),
(title: "Steel 72", fv: 0.42)
]
//...
@IBOutlet var picker: UIPickerView!
//...
@IBAction func btnCalcClicked() {
let selectedRow = picker.selectedRow(inComponent: 0)
guard data.indices.contains(selectedRow) else {
print("selectedRow invalid")
return
}
fv = data[selectedRow].fv
//...
}
//...
}
//...
extension ScubaViewController: UIPickerViewDelegate{
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent: Int) - String? {
return data[row].title
}
}