Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码可以工作,但不确定如何在iOS中实现它_Ios_Swift - Fatal编程技术网

代码可以工作,但不确定如何在iOS中实现它

代码可以工作,但不确定如何在iOS中实现它,ios,swift,Ios,Swift,我目前正在上一门化学课,我认为制作一个可以计算强酸/弱酸溶液pH值的程序会很有趣。该代码在操场上工作,我希望最终将其实现到一个iOS项目中。该程序包含3个参数:酸的初始浓度、酸的化学式和酸的平衡常数(如果需要)。该程序首先获取酸的初始浓度,然后获取酸的化学式,并确定酸的强弱。接下来,我建立了一个if语句,根据酸的强度计算pH值。如果酸很弱,则需要一个平衡常数。以下是我到目前为止的情况: import UIKit func acidConcentration(acidMolarity: Doub

我目前正在上一门化学课,我认为制作一个可以计算强酸/弱酸溶液pH值的程序会很有趣。该代码在操场上工作,我希望最终将其实现到一个iOS项目中。该程序包含3个参数:酸的初始浓度、酸的化学式和酸的平衡常数(如果需要)。该程序首先获取酸的初始浓度,然后获取酸的化学式,并确定酸的强弱。接下来,我建立了一个if语句,根据酸的强度计算pH值。如果酸很弱,则需要一个平衡常数。以下是我到目前为止的情况:

import UIKit

func acidConcentration(acidMolarity: Double) -> Double {
    return acidMolarity
}

let initialConcentration = acidConcentration(0.50)

var hydroniumConcentration = 0.00

var pH = 0.00

func determineAcidStrength(acidName: String) -> String {

    var acidStrength = ""

    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" {
        acidStrength = "strong"
    } else {
        acidStrength = "weak"
    }

    return acidStrength

}

let strength = determineAcidStrength("HBr")

if strength == "strong" {

    hydroniumConcentration = initialConcentration

    pH = -log10(hydroniumConcentration)

    print(String(format: "%.2f", pH))

} else {

    func equilibriumConstant(ka: Double) -> Double {
        return ka
    }

    let eqConstant = equilibriumConstant

    var weakAcidConcentration = sqrt(eqConstant(1.8e-5) * initialConcentration)

    pH = -log10(weakAcidConcentration)

    print(String(format: "%.2f", pH))

}

由于我对编程非常陌生,这是我第一次尝试编写任何代码,我想知道是否有任何方法可以清理我所拥有的内容,或者有任何技巧可以更好地组织代码。感谢您的帮助。谢谢。

您发布的代码对于可以在单个函数中完成的任务来说过于复杂

下面的函数接受两个参数,acidName作为
字符串
,initialConcentration作为
双精度
,并将浓度作为
双精度
值返回

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double {
    var acidIsStrong = false;

    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" {
        acidIsStrong = true;
    }
    if acidIsStrong {
        return -log10(initialConcentration);
    } else {
        return -log10( (1.8e-5) * initialConcentration);
    }
}
下面是该函数的一个使用示例:

//Just pass in your acid name and initial concentration
let concentration = calculateConcentration("HBr", initialConcentration: 0.50);
print(String(format: "%.2f", concentration));
下面是一个更小版本的函数,编写效率更高(工作原理相同):

还有一个更小的版本,可读性不强:

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double {
    return -log10( initialConcentration * ((acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3") ? (1.8e-5) : 1.0));
}

您发布的代码对于可以在单个函数中完成的事情来说过于复杂

下面的函数接受两个参数,acidName作为
字符串
,initialConcentration作为
双精度
,并将浓度作为
双精度
值返回

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double {
    var acidIsStrong = false;

    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" {
        acidIsStrong = true;
    }
    if acidIsStrong {
        return -log10(initialConcentration);
    } else {
        return -log10( (1.8e-5) * initialConcentration);
    }
}
下面是该函数的一个使用示例:

//Just pass in your acid name and initial concentration
let concentration = calculateConcentration("HBr", initialConcentration: 0.50);
print(String(format: "%.2f", concentration));
下面是一个更小版本的函数,编写效率更高(工作原理相同):

还有一个更小的版本,可读性不强:

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double {
    return -log10( initialConcentration * ((acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3") ? (1.8e-5) : 1.0));
}

我不是一个很好的化学家,所以,我不确定配方,但是这个怎么样:

class Acid: CustomStringConvertible {

    static let strongAcids = [ "HBr", "HI", "HClO4", "HCl", "HClO3", "H2SO4", "HNO3" ]

    var name: String
    var concentration: Double
    var equilibriumConstant: Double?

    var pH: Double {
        get {
            var adjustedConcentration = concentration
            if !Acid.strongAcids.contains(name) {
                guard let ka = equilibriumConstant else {
                    return Double.NaN;
                }
                adjustedConcentration = sqrt(ka * concentration)
            }
            return -log10(adjustedConcentration)
        }
    }

    init(name: String, concentration: Double, equilibriumConstant ka: Double? = nil) {
        self.name = name
        self.concentration = concentration
        self.equilibriumConstant = ka
    }

    var description: String {
        get {
            if let ka = equilibriumConstant {
                return "\(name) (concentration: \(concentration) / EqK: \(ka) pH: \(String(format: "%.2f", pH)))"

            } else {
                return "\(name) (concentration: \(concentration) / pH: \(String(format: "%.2f", pH)))"
            }
        }
    }
}

let acid = Acid(name: "HBr", concentration: 0.5);
print("\(acid)") // prints "HBr (concentration: 0.5 / pH: 0.30)"
print(String(format: "%.2f", acid.pH)) // prints "0.30"
let weakAcid = Acid(name: "Weak", concentration: 0.2, equilibriumConstant: 1.8e-5)
print("\(weakAcid)") // prints "Weak (concentration: 0.2 / EqK: 1.8e-05 pH: 2.72)"

至于创建应用程序。。。对于这样一个简单的应用程序,您可能只需要创建一个“单视图应用程序”,其中包含3个文本字段(名称、浓度和常数)和一个“计算”按钮。我希望这是有道理的。

我不是一个很好的化学家,所以,我不确定配方,但是这个怎么样:

class Acid: CustomStringConvertible {

    static let strongAcids = [ "HBr", "HI", "HClO4", "HCl", "HClO3", "H2SO4", "HNO3" ]

    var name: String
    var concentration: Double
    var equilibriumConstant: Double?

    var pH: Double {
        get {
            var adjustedConcentration = concentration
            if !Acid.strongAcids.contains(name) {
                guard let ka = equilibriumConstant else {
                    return Double.NaN;
                }
                adjustedConcentration = sqrt(ka * concentration)
            }
            return -log10(adjustedConcentration)
        }
    }

    init(name: String, concentration: Double, equilibriumConstant ka: Double? = nil) {
        self.name = name
        self.concentration = concentration
        self.equilibriumConstant = ka
    }

    var description: String {
        get {
            if let ka = equilibriumConstant {
                return "\(name) (concentration: \(concentration) / EqK: \(ka) pH: \(String(format: "%.2f", pH)))"

            } else {
                return "\(name) (concentration: \(concentration) / pH: \(String(format: "%.2f", pH)))"
            }
        }
    }
}

let acid = Acid(name: "HBr", concentration: 0.5);
print("\(acid)") // prints "HBr (concentration: 0.5 / pH: 0.30)"
print(String(format: "%.2f", acid.pH)) // prints "0.30"
let weakAcid = Acid(name: "Weak", concentration: 0.2, equilibriumConstant: 1.8e-5)
print("\(weakAcid)") // prints "Weak (concentration: 0.2 / EqK: 1.8e-05 pH: 2.72)"
至于创建应用程序。。。对于这样一个简单的应用程序,您可能只需要创建一个“单视图应用程序”,其中包含3个文本字段(名称、浓度和常数)和一个“计算”按钮。我希望这是有道理的