【问题标题】:Ambiguous reference in swift3swift3中的模糊参考
【发布时间】:2016-09-21 04:56:11
【问题描述】:

迁移到 swift3 后,您好。我有这个问题?你们知道哪里错了吗?

对成员“/”的模糊引用

let rateForPeriod = interestRate! / Double(100) / Double(K.monthsEachYear)

【问题讨论】:

  • interestRate 的类型?
  • 双重类型的兄弟
  • 如果我这样写的话错误似乎消失了 var rateForPeriod = interestRate! / Double(100) rateForPeriod = rateForPeriod / Double(K.monthsEachYear) 解决这个问题的方法正确吗?
  • 这样试试(interestRate! / Double(100)) / Double(K.monthsEachYear)

标签: reference alamofire swift3 ambiguous


【解决方案1】:

恭喜! 您可能刚刚在编译器中发现了一个错误!

让我们尝试您的代码的一些变体:

这失败了:

let optional: Double? = 1
let result = optional! / Double(1) / Double(1)

这行得通:

let optional: Double? = 1
let unwrapped = optional!
let result = unwrapped / Double(1) / Double(1)

这失败了:

let rateForPeriod = (Double(1) as Double?)! / Double(1) / Double(1)

但这有效:

let rateForPeriod = ((Double(1) as Double?)! as Double) / Double(1) / Double(1)

所以这也有效:

let optional: Double? = 1
let rateForPeriod = optional! as Double / Double(1) / Double(1)

这似乎是新的可选展开规则的副作用(可能是错误)。

请注意,一次只进行一个除法按预期工作:

let optional: Double? = 1
let rateForYear = optional! / Double(1)
let rateForPeriod = rateForYear / Double(1)

我们应该怎么做?

  • 提交错误报告
  • 停止强制解包

尝试看看是否可以让 interestRate 不是可选的,使用保护子句或给它一个默认值,如下所示:let rate = interestRate ?? 0

【讨论】:

    【解决方案2】:

    如果我是你,我会使用 optional binding 来检查 interestRate 是否为 nil

    let interestRate: Double? = 0.4
    
    if let interestRate = interestRate {
      let rateForPeriod = interestRate / Double(100) / Double(1)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-04
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多