2016-02-27 4 views
0

Я пытаюсь управлять переменным так:Если позволить положение при получении от NSUserDefaults()

var isFinished: Bool { 
    get { 
     return NSUserDefaults.standardUserDefaults().boolForKey("isFinished") 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
    } 

Это работает, однако, я пытаюсь сделать его более безопасным путем использования if let при получении :

var isFinished: Bool { 
    get { 
     if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") as? Bool { 
     return isFinished 
     } 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
    } 

Это даст желтую ошибку, хотя: «Условный бросок от„Bool“до„Bool“всегда удается.»

Хорошо тогда:

if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") { 
    return isFinished 
} 

Теперь еще хуже: "Initializer для условной привязки должны иметь факультативный тип, а не" Bool"

Что такое правильный способ обработки этого?

ответ

3

Ваш основной подход в порядке.

boolForKeyNSUserDefaults не возвращает необязательный, поэтому любая необязательная попытка связывания бессмысленна.

func boolForKey(_ aKey: String) -> Bool 

Если логическое значение, связанное с указанным ключом, что значение возвращается. Если ключ не найден, этот метод возвращает NO.

+0

Я надеюсь, что они это изменить, OPTIONALS бы идеально подходят для этого. –

+0

@TimVermeulen Согласно рекомендации Apple о регистрации значений по умолчанию для 'NSUserDefaults', чтобы иметь надежные состояния, необязательные варианты вообще не нужны. – vadian

+0

Спасибо, я не знал этого! – nontomatic

1

Вам нужно написать так: -

if let isFinished : Bool = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") 
{ 
     return isFinished 
} 

Надеется, что это поможет :)

+0

Это поднимет * Инициализатор для условной привязки должен иметь необязательный тип, а не «Bool» * error – vadian

+0

@vadian он отлично работает в Xcode7 –

+0

Спасибо за ваш ответ, Н.Раваль, я принял другой ответ, поскольку он кажется быть рекомендацией Apple, и люди, такие как я, могут не знать, как это фактически обрабатывается. Поскольку ваш ответ действительно работает, я дал ему преимущество. – nontomatic

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

  • Нет связанных вопросов^_^