You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift中简化重复换算代码,或从if-else/switch返回多值

Swift 代码简化方案

你的代码冗余主要来自两部分:重复的输入值计算、每个单位转换都单独做了一次lengthUnit判断。我们可以通过基准单位中转的思路简化逻辑,也可以直接用元组一次性返回三个单位的结果。


方案1:保留原有三个计算属性,仅收拢公共逻辑

先把输入值的计算、输入单位转基准单位(米)的逻辑抽成公共部分,三个结果直接从基准米值换算即可:

// 私有公共属性:将输入统一转换为米为单位的基准值
private var baseMeter: Double {
    let lengthInput = Double(lengthIn1) + Double(lengthIn2) / 100
    switch lengthUnit {
    case 0: return lengthInput // 输入本身是米
    case 1: return lengthInput / 39.37 // 输入是英寸,转米
    case 2: return lengthInput / 3.281 // 输入是英尺,转米
    default: return lengthInput // 异常兜底
    }
}

// 原有三个属性直接从基准值换算,仅需一行
var meterCalc: Double { baseMeter }
var inchCalc: Double { baseMeter * 39.37 }
var feetCalc: Double { baseMeter * 3.281 }

方案2:单次判断直接返回三个值(满足你想要一次拿到三个结果的需求)

Swift 支持返回元组类型,你可以只做一次条件判断,直接同时返回三个单位的结果,后续不同场景直接取对应字段使用即可:

// 一次计算返回三个单位的结果,元组字段可以自定义命名
var allLengthResults: (meter: Double, inch: Double, feet: Double) {
    let lengthInput = Double(lengthIn1) + Double(lengthIn2) / 100
    let baseMeter: Double
    switch lengthUnit {
    case 0: baseMeter = lengthInput
    case 1: baseMeter = lengthInput / 39.37
    case 2: baseMeter = lengthInput / 3.281
    default: baseMeter = lengthInput
    }
    return (baseMeter, baseMeter * 39.37, baseMeter * 3.281)
}

// 调用示例
let results = allLengthResults
// 不同场景分别取对应值即可
let meterVal = results.meter
let inchVal = results.inch
let feetVal = results.feet

内容的提问来源于stack exchange,提问作者hps28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:57:04