2016-03-02 10 views
0

Я разбираю данные json, используя SwiftyJson из API погоды. И у меня есть список факультативных данных, которые я добавил в один оператор охраны, чтобы сделать код более простым и эффективным. Но, к сожалению, в списке опций я иногда имею значения nil из проанализированных данных API, поэтому оператор переходит к else и ничего не возвращает. Должен ли я включать операнды else в каждый факультативный или есть способ продолжить и вернуть найденные значения non nil в инструкции else?Операции гвардии для опций - это нуль в swift

Вот мой код:

Вот код после разбора данных, который изменяет метки на раскадровке.

if self.segmentedControl.selectedSegmentIndex == 0 { 
        UIApplication.sharedApplication().applicationIconBadgeNumber = Int(round(cTemp)) 
        self.tempLabel.text = String(Int(round(cTemp))) + "˚" 
        self.humidityLabel.text = String(Int(round(cHumidity*100))) + "%" 
        self.pressureLabel.text = String(Int(round(cPressure))) + NSLocalizedString(" mBar", comment: "milli Bar") 
        self.windSpeedLabel.text = String(Int(round(cWindSpeed))) + NSLocalizedString(" Km/h", comment: "Kilo fe El sa3a") 
        self.realFeelLabel.text = String(Int(round(cFeelsLike))) + "˚" 
        self.windDirectionLabel.text = self.windDirectionNotation(cWindDirection) 
        self.rainChanceLabel.text = String(Int(round(cRainChance * 100))) + "%" 
       //  self.visibilityLabel.text = String(Int(round(cVisibility))) + NSLocalizedString(" Km", comment: "Km") 
        self.descriptionLabel.text = cSummary 
        self.descriptionMoreLabel.text = cDailySummary 
        self.bgImage.image = self.bgPicker(cIconString) //Change BG according to currently weather conditions. 

       } else { 
        self.tempLabel.text = String(Int(round(cTemp))) + "˚" 
        self.humidityLabel.text = String(Int(round(cHumidity*100))) + "%" 
        self.pressureLabel.text = String(Int(round(cPressure))) + NSLocalizedString(" mBar", comment: "milli Bar") 
        self.windSpeedLabel.text = String(Int(round(cWindSpeed))) + NSLocalizedString(" mph", comment: "meel fee el sa3a") 
        self.realFeelLabel.text = String(Int(round(cFeelsLike))) + "˚" 
        self.windDirectionLabel.text = self.windDirectionNotation(cWindDirection) 
        self.rainChanceLabel.text = String(Int(round(cRainChance * 100))) + "%" 
       //  self.visibilityLabel.text = String(Int(round(cVisibility))) + NSLocalizedString(" mi", comment: "meel") 
        self.descriptionLabel.text = cSummary 
        self.descriptionMoreLabel.text = cDailySummary 
        self.bgImage.image = self.bgPicker(cIconString) //Change BG according to currently weather conditions. 
       } 
+0

Что вы хотите сделать, если один из вариантов является нулем? Другими словами: если вы не хотите прерывать, почему вы тестируете все эти значения в первую очередь? Ваши 'cTemp' и т. Д. Являются чисто локальными переменными, вы ничего не делаете с ними, так что же является целью вашего кода? – matt

+0

Я хочу пренебрегать им и продолжать операции. Опубликовать текущие найденные данные на ярлыках раскадровки. Или, может быть, мне нужно попробовать поставить весь оставшийся код в инструкции else? Но данные будут неполными. Потому что он возвращается, прежде чем проверять все опции, найденные в инструкции охраны. –

+0

Хорошо, круто. Итак, где же вы это делаете? Вам нужно показать эту часть своего кода, если вы хотите помочь переписать код. – matt

ответ

0

Это законно установить метку-х text к нулю или необязательной строке. Поэтому для каждого элемента используйте опциональную цепочку для разворачивания и установите соответствующую метку text.

К сожалению, я не знаю SwiftyJSON, но вот как бы это сделать, если бы это было просто словарь:

// here is some test data 
let content = ["currently":["temperature":"21"]] 
let lab = UILabel() 
// this is what you would do 
lab.text = (content["currently"] as? NSDictionary)?["temperature"] as? String 

Дело в том, что последней строке. Если мы получим nil, мы установим text на nil и никакого вреда. Если мы получим нашу строку, мы установим text ярлыка на необязательную упаковку этой строки и никакого вреда.

+0

Хорошо, что вы имеете в виду, это изменить метку после каждого необязательного утверждения немедленно? И если один, если их нет, никакого вреда не будет. –

+0

Точно, но, к сожалению, я не могу точно сказать вам синтаксис для этого с SwiftJSON. – matt

+0

Привет @matt: это синтаксис для SwiftyJSON: 'json [" now "] [" temperature "]. Double'. Красота этой библиотеки заключается в том, что вы можете безопасно просматривать JSON. Если вы используете недоступный ключ, вы просто получаете значение «nil», когда пытаетесь преобразовать связанное значение в один из поддерживаемых типов ('Double',' Int', ...). –