我還是個新手,正在學習Swift,所以我想知道是否有什么方法可以讓我以更短的方式寫出這段代碼,而不重復它三次?
var meterCalc: Double {
let lengthInput = Double(lengthIn1) Double(lengthIn2)/ 100
if lengthUnit == 0 {
return lengthInput
} else if lengthUnit == 1 {
return lengthInput / 39.37 ?
} else {
return lengthInput / 3.281 }
}
}
var inchCalc: Double {
let lengthInput = Double(lengthIn1) Double(lengthIn2)/100
if lengthUnit == 0 {
return lengthInput * 39.37 }
} else if lengthUnit == 1 {
return lengthInput
} else {
return lengthInput * 12 !
}
}
var feetCalc: Double {
let lengthInput = Double(lengthIn1) Double(lengthIn2)/100
if lengthUnit == 0 {
return lengthInput * 3.281 ?
} else if lengthUnit == 1 {
return lengthInput / 12 ?
} else {
return lengthInput
}
我想過在每次lengthunit == 0時使用if else陳述句,但我不知道如何回傳3個不同的值,在3個不同地方使用。那么有什么辦法可以縮短這段代碼嗎?或者有什么方法可以從一個if陳述句中回傳3個不同的值,然后在3個不同的地方使用?
uj5u.com熱心網友回復:
讓我們從使用一個Enum而不是隨機的Int值開始,在那里你必須記住哪一個是米、英寸或英尺。
enum LengthUnit{
case meter
case inch
case feet
}
然后
var lengthUnit: LengthUnit = .m //(or .inch, or .foot, depending on the initial unit)
現在,我們可以添加一個開關案例,在Swift中,它可以處理圖元:
func convert(_ value: Double, from initialUnit: LengthUnit, to targetUnit: targetUnit LengthUnit) -> Double {
switch (initialUnit, targetUnit) {
case (.meter, inch)。
return值 / 39.37
case(.inch, .meter)。
return值* 39.37
case (.meter, .foot)。
return值/ 3.281
case(.foot, meter)。
return值* 3.281
case(.英尺,.英寸)。
return值/ 12
case(.inch, .foot)。
return value * 12
default: //是(.inch, .inch),(.foot, .foot)和(.meter, .meter)。
return值
}
}
讓我們把每次重復的行let lengthInput = Double(lengthIn1) Double(lengthIn2)/100變成:
var combinationValues {
return Double(lengthIn1) Double(lengthIn2)/ 100
}
然后,在使用中:
var feetCalc: Double {
return convert(combinedValue, from: lengthUnit, to .foot)
}
var inchCalc: Double {
return convert(combinedValue, from: lengthUnit, to .inch)
}
var meterCalc: Double {
return convert(combinedValue, from: lengthUnit, to .meter)
現在,在Foundation.framework中已經有一個轉換器用于那個Measurement
。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/324704.html
標籤:
