如何在Swift中表示质量的大小?
发布时间:2020-12-14 04:28:26 所属栏目:百科 来源:网络整理
导读:// SI unitsenum Magnitude : Measurement { case Milli = Measurement(-3,"ml") case Centi = Measurement(-2,"cl") case Desi = Measurement(-1,"dl") case Gram = Measurement(0,"g") case Kilo = Measurement(3,"kg")}class Measurement { let magnitude
// SI units enum Magnitude : Measurement { case Milli = Measurement(-3,"ml") case Centi = Measurement(-2,"cl") case Desi = Measurement(-1,"dl") case Gram = Measurement(0,"g") case Kilo = Measurement(3,"kg") } class Measurement { let magnitude : Int let shorthandName : String init(magnitude: Int,shorthandName: String) { self.magnitude = magnitude self.shorthandName = shorthandName } } 我正在将转换器作为应用程序的一部分来实现.我开始在不同质量的大小之间进行转换.我认为将Magnitude作为枚举很好,与其简短的名字紧密相关.但是Swift并没有让我有一个包含对象的枚举,因为原始值需要是一个字面值.任何人都知道一种更聪明的方式来表示幅度,速记名称和单位之间的转换之间的联系吗? 解决方法
如果您希望能够使用String指定质量单位,也许您可??以使用String来表示简写名称和变量,以便为您提供有关单位的更多信息,例如幅度.这是一个例子:
1. MassUnit enum MassUnit: String { case Milligrams = "mg" case Grams = "g" case Kilos = "kg" case Tons = "t" var magnitude: Int { let mag: Int switch self { case .Milligrams: mag = -3 case .Grams : mag = 0 case .Kilos : mag = 3 case .Tons : mag = 6 } return mag } static func ordersOfMagnitudeFrom(unit1: MassUnit,to unit2: MassUnit) -> Int { return unit1.magnitude - unit2.magnitude } } extension MassUnit: Printable { var description: String { return self.rawValue } } 2.然后,为了存储实际质量,您可以使用Struct,它也可以处理转换.例如: struct Mass { var value : Double var unit : MassUnit static func convertMass(mass: Mass,toUnit unit: MassUnit) -> Mass { let ordersOfMagnitude = MassUnit.ordersOfMagnitudeFrom(mass.unit,to: unit) let multipler = pow(10.0,Double(ordersOfMagnitude)) return Mass(value: mass.value * multipler,unit: unit) } // Returns an optional Mass because we can't know for sure // unitString will represent a MassUnit. static func convertMass(mass: Mass,toUnit unitString: String) -> Mass? { if let unit = MassUnit(rawValue: unitString) { return convertMass(mass,toUnit: unit) } return nil } } extension Mass { init?(value: Double,_ unitString: String) { if let unit = MassUnit(rawValue: unitString) { self = Mass(value: value,unit: unit) } else { return nil } } } extension Mass : Printable { var description: String { return "(value) (unit)" } } 3.然后你可以使用群众和单位: if let mass = Mass(value: 1,"kg"),let convertedMass = Mass.convertMass(mass,toUnit: "g") { println("(mass) converted to (MassUnit.Grams) equals (convertedMass)") // Prints: 1.0 kg converted to g equals 1000.0 g } 但是,如果使用不可转换为MassUnit的unitString(在创建或转换时),将返回nil.例如: let mass = Mass(value: 1,"NotAUnit") // nil (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 通过Postback保留UpdatePanel中DIV的滚动位置
- objective-c – 如何“突破”dispatch_apply()?
- 新手SQLite数据库操作(转)
- SWift开发:使用委托/Protocol 实现类之间的数据传递
- React-Native Fetch方法发送网络请求
- 如何编写oracle Query将字符串拆分为多个按类别相关的行
- c# – 实体框架核心,DELETE CASCADE和[必需]
- Oracle/DB2 null key index
- ios – 如何更改UINavigationController推送过渡样式?
- swift – 单元测试WKNavigationDelegate函数