使用Published变量观察带有Combine的Publisher中的切换情况



我有一个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()
}()

现在,只有一个语句,它被认为是隐式返回,没有什么是未使用的。

相关内容

  • 没有找到相关文章

最新更新