2016-09-21 3 views
3

Привет после перехода на swift3. У меня такая проблема? Ребята знают, что случилось?Неоднозначная ссылка в swift3

неоднозначной ссылки на член "/"

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

Тип 'interestRate'? –

+0

двойной тип брок –

+0

похоже ошибка нет если я напишу вот так var rateForPeriod = interestRate!/Double (100) rateForPeriod = rateForPeriod/Double (K.monthsEachYear) Правильно ли это исправить? –

ответ

0

Если бы я тебя, я хотел бы использовать опциональное связывание проверить, является ли InterestRate является ноль или нет.

let interestRate: Double? = 0.4 

if let interestRate = interestRate { 
    let rateForPeriod = interestRate/Double(100)/Double(1) 
} 
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) 

Что мы должны делать?

  • отчет об ошибке
  • Stop сила развертка вещи

Try, чтобы увидеть, если вы можете сделать InterestRate не быть необязательным, используйте пункт охраны или дать ему значение по умолчанию, как это: let rate = interestRate ?? 0.

Смежные вопросы