我正在尝试在XCode中创建一个物理应用,它将近似波函数并返回允许的能量。我是对象/类的新手,所以我想知道如何知道我是否应该使用类。
目前,我为Wavefunction
创建了一个类,为Potential
创建了一个类(“potential”只是来自外部文件的数据,表示“字段”,可以这么说)。现在我想知道我是否需要为Constants
创建一个类,它将包含与物理相关的所有任意常量,例如-2m/hbar^2
。
我如何决定是否需要这门课?
答案 0 :(得分:2)
您不需要为常量创建一个类 - 只需使用枚举,这是一种更简单,更轻松的方式来表示这些静态值:
enum PhysicalConstants {
static let speedOfLight = 299792458 //meters per sec
static let atomicWeightOfCobalt 58.933195 //u ± 0.000005
}
您可以将它们存储在自己的文件中,例如 constants.swift ,然后您可以在代码中的任何位置调用它们:
let circumference = PhysicalConstants.pi * 2 * r
至于更一般的问题,答案取决于几个因素 - 是否存在具有满足您需求的功能的现有对象?您是否期望您将创建一个有序的结构层次结构,以继承彼此的功能?两者都会建议对象。
总的来说,虽然Swift在允许你继续使用传统可可编程的纯面向对象方法的同时,如果你想要你的解决方案,往往会偏离自定义数据结构的对象,例如你所描述的那些“swifty”(也就是说,安全且易于阅读)。
当然,恕我直言。答案 1 :(得分:2)
您是否需要创建Constants
类的实例?不,所以它不应该是一个班级。
定义常量的更合适的方法是Double
的静态属性,就像pi
被定义为Double
的静态属性一样。
extension Double {
// The Dirac constant in Joule-seconds, equal to the Planck constant divided by 2π.
static let diracConstant = 1.054_571_8e-34 // in Joule-seconds
// Or you can spell it this way if you want.
static let hBar = 1.054_571_8-34
// Or even this way! ħ is Unicode U+0127 LATIN SMALL LETTER H WITH STROKE
static let ħ = 1.054_571_8e-34
}
然后您可以像这样明确地访问它:
-2 * m / (Double.diracConstant * Double.diracConstant)
-2 * m / (Double.hBar * Double.hBar)
-2 * m / (Double.ħ * Double.ħ)
据推测,m
已经是Double类型,因此您可以使用“点语法”使表达式更短:
-2 * m / (.diracConstant *.diracConstant)
-2 * m / (.hBar *.hBar)
-2 * m / (.ħ *.ħ)
或者,如果您定义square
函数:
func square(_ x: Double) -> Double { return x * x }
然后你可以这样说:
-2 * m / square(.diracConstant)
-2 * m / square(.hBar)
-2 * m / square(.ħ)
如果您使用Float
代替Double
进行计算,则可以使用Float
类型执行所有操作。