ios - 代码有效,但不确定如何将其实现到 iOS 中

标签 ios swift

<分区>

我目前正在上化学课,我认为编写一个可以计算强酸/弱酸溶液 pH 值的程序会很有趣。该代码在 Playground 上有效,我想最终将其实现到 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))

}

由于我是编程的新手,而且这是我第一次尝试编写任何代码,所以我想知道是否有任何方法可以清理我已有的东西或有什么技巧可以更好地组织代码。任何帮助表示赞赏。谢谢。

最佳答案

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

下面的函数接受 2 个参数,acidName 作为 String,initialConcentration 作为 Double 并返回浓度作为 Double值(value)。

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 {
    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" {
        return -log10(initialConcentration);
    }
    return -log10( (1.8e-5) * initialConcentration);
}

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

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));
}

关于ios - 代码有效,但不确定如何将其实现到 iOS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192759/

相关文章:

ios - 以下swift代码是什么意思?

ios - Swift 过滤字符串数组

swift - 什么时候不需要使用 lambda 执行来初始化惰性变量?

swift - 我从两个 viewController 转到一个 viewController。如何向调用者解除 segue?

ios - 在 UIwebView 应用程序中使用 Facebook 登录

ios - Xcode 中的 Alamofire 请求 "status_code"= 401

ios - 使用 MKMapView、核心位置和核心数据

iphone - 如何在 iPhone 上以卡拉 OK 风格显示歌词?

swift - swift代码的返回类型

ios - 如何以编程方式按下 SearchBar 的取消按钮或将其返回到初始状态?