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

Combine中使用@Published观察枚举case并修复eraseToAnyPublisher警告

问题核心原因

  • annualRate的初始化闭包存在多条语句(第一行提前声明了var output: Double变量),无法触发Swift的单表达式隐式返回规则,你没有显式返回最终生成的AnyPublisher实例,导致eraseToAnyPublisher()的返回值被丢弃,触发未使用结果的警告
  • 存在笔误:枚举定义的名称是MortgageType,但term变量声明的类型是MortgageTerm,需要先修正命名一致的问题

修复代码

修正后的annualRate定义如下:

public lazy var annualRate: AnyPublisher<Double, Never> = {
    $term
        .map { [weak self] switchCase -> Double in
            guard let self = self else { return 0 }
            let output: Double
            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
        }
        .eraseToAnyPublisher()
}()

优化说明

上述代码中新增了[weak self]修饰符,避免闭包对ObservableObject实例产生强引用导致内存泄漏,同时把output变量的声明移到了map闭包内部,移除了初始化闭包中的多余语句,直接返回Publisher链式调用的最终结果即可解决警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:00