2014-12-09 4 views
1

Неужели кто-нибудь сталкивается с футляром, похожим на то, что показывает моя фотография внизу?В Swift, когда false означает true

У меня есть переменная landingBools.didSlowPast40Knots, которая (как вы можете видеть из отладочной распечатки) имеет значение false, но по какой-либо причине утверждение if оценивается как истина.

Любые идеи, почему это происходит? Или это просто случайная ошибка?

Похоже, я не уточняя тип ... я буду стараться сделать их: Bool

struct LandingBOOLs { 
    var didDepart : Bool = false 
    var didLand : Bool = false 
    var didSpeedOver40Knots : Bool = false 
    var didSlowPast40Knots : Bool = false 

    func isLanded() -> Bool { 
     return didDepart & didLand & didSpeedOver40Knots & didSlowPast40Knots 
    } 

} 

enter image description here

Followup

Я изменил мой код:

if (lastPhase == .Descend && phaseOfFlightString == .LevelFlight) { 
    if (landingBools.didDepart) { 
    if (landingBools.didSlowPast40Knots) {    
     let landed = landingBools.didLand 
     if (landed) { 
     NSNotificationCenter.defaultCenter().postNotificationName("LANDED", object: self) 
     } 
    } 
    } 
} 

enter image description here

теперь я смущен, потому что моя функция:

func isLanded() -> Bool { 
    return didDepart & didLand & didSpeedOver40Knots & didSlowPast40Knots 
} 

поэтому не должны позволить выяснить его логическое значение и не присвоить ему значение 128? Нужно ли делать & & вместо &?

+0

Является ли ваш 'didSlowPast40Knots'' NSNumber' ложным как значение (эквивалентно '@ NO' в ObjC) или он является скалярным типом как' bool'? Также - как выглядит ваше объявление о собственности? – Eimantas

+1

Можете ли вы зарегистрировать значение landingBools.didSlowPast40Knots раньше, если проверить и зарегистрировать еще один внутри if и добавить else с последним журналом значения. Я считаю, что это правда, но журнал с консоли может отображать не самые ожидаемые значения. Вы также можете изменить условие, добавив == true. – Greg

+2

Как с Грегом, я был бы более склонен полагать, что lldb действовал; Я видел некоторые странные результаты с Swift. Попробуйте подтвердить '' println'' или '' NSLog''. (Кроме того, попробуйте очистить и перестроить свой проект, я полагаю, есть вероятность, что отладочные символы/источник не синхронизированы с фактическим кодом ...) –

ответ

0

Чистая сборка, кажется, исправить все.

+0

Прохладный. Я бы предположил, что в какой-то момент система сборки запуталась, и вы использовали другой код из источника, который, по вашему утверждению, проходил. На этом этапе жизнь может стать очень запутанной. –

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