2016-09-21 4 views
3

Hallo nach der Migration zu swift3. Ich habe dieses Problem? Wissen deine Leute was falsch?Mehrdeutige Referenz in swift3

mehrdeutig Verweis auf Mitglied "/"

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

Art von 'interestRate'? –

+0

doppelte Art bro –

+0

es scheint Fehler gegangen, wenn ich so schreibe var rateForPeriod = interestRate!/Double (100) rateForPeriod = rateForPeriod/Double (K.MonatsEachYear) Ist es richtig, dies zu beheben? –

Antwort

0

Wenn ich Sie wäre, würde ich optionale Bindung zu prüfen, ob interestRate ist nil oder nicht verwenden.

let interestRate: Double? = 0.4 

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

Herzlichen Glückwunsch! Möglicherweise haben Sie gerade einen Fehler im Compiler gefunden!

Lasst uns ein paar Variationen des Codes versuchen:

Dies schlägt fehl:

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

Dies funktioniert:

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

Dies schlägt fehl:

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

Aber das funktioniert :

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

So funktioniert das auch:

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

, dass eine Nebenwirkung (wahrscheinlich Fehler) der neuen optionalen Abwickeln Regeln zu sein scheint.

Beachten Sie, dass nur eine Division zu einem Zeitpunkt tun, funktioniert wie erwartet:

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

Was sollen wir tun?

  • Datei ein Bug-Report
  • Stop-Kraft Abwickeln Dinge

Versuchen Sie, ob Sie interestRate nicht optional, verwenden Sie eine Schutzklausel oder geben sie einen Standardwert wie folgt machen: let rate = interestRate ?? 0.

Verwandte Themen