我有一个enum
案例,它是ObservableObject
类中的@Published
变量。我要做的是观察下面定义的term
变量的变化,并更新annualRate
发布者。
@Published
变量
@Published var term: MortgageTerm = .thirtyYear
MortgageTerm
枚举定义如下:
public enum MortgageType: Int, CaseIterable {
case tenYear = 10
case fifteenYear = 15
case twentyYear = 20
case thirtyYear = 30
}
我试图得到这个annualRate
定义,所以它观察到上面的term
变量的变化:
public lazy var annualRate: AnyPublisher<Double, Never> = {
var output: Double
$term
.map { switchCase -> Double in
switch switchCase {
case .tenYear:
output = self.rates.tenYearFix
case .fifteenYear:
output = self.rates.fifteenYearFix
case .twentyYear:
output = self.rates.twentyYearFix
case .thirtyYear:
output = self.rates.thirtyYearFix
}
return output * 0.01
}
// FIXME: Result of call to `eraseToAnyPublisher()` is unused
.eraseToAnyPublisher()
}()
我在.eraseToAnyPublisher()
行得到这个警告。我搞砸了什么,我该怎么解决?
这就是rates
的来源:
private lazy var rates: AverageRate = {
let rateMock = AverageRate(thirtyYearFha: 2.873,
thirtyYearVa: 2.858,
tenYearFix: 2.068,
fifteenYearFix: 2.358,
thirtyYearFix: 3.054,
fiveOneArm: 2.898,
sevenOneArm: 2.972,
twentyYearFix: 2.756)
return rateMock
}()
现在,您的annualRate
{ }
中没有return
语句。您有两个语句——一个定义output
,另一个创建发布者。如果只有一条语句,它将被认为是隐式返回,因此不会出现错误。
我认为你可以稍微重构一下,去掉var output
,因为每个值都被修改了相同的量。所以你可以添加另一个map
:
public lazy var annualRate: AnyPublisher<Double, Never> = {
$term
.map { switchCase -> Double in
switch switchCase {
case .tenYear:
return self.rates.tenYearFix
case .fifteenYear:
return self.rates.fifteenYearFix
case .twentyYear:
return self.rates.twentyYearFix
case .thirtyYear:
return self.rates.thirtyYearFix
}
}
.map { $0 * 0.01 }
.eraseToAnyPublisher()
}()
现在,只有一个语句,它被认为是隐式返回,没有什么是未使用的。