ноль Проверка в пользовательских настройках по умолчанию (Swift 5) - PullRequest
1 голос
/ 30 января 2020

У меня есть одно изображение, сохраненное в UserDefaults, но пока пользователь не установит его, UserDefaults пусто. Мне нужно проверить

Если UserDefaults пусто и если оно есть, отобразить изображение.

Прямо сейчас при установке приложения fre sh, пока пользователь не установит изображение в UserDefaults приложение упало.

Мой декодер работает отлично после того, как я установил изображение в UserDefaults, проблема заключается только в проверке кода для nil.

Я был только учусь быстро на месяц и я застрял в этом сценарии.

вот мой код:

 //Image Decode
 let Data = UserDefaults.standdard.object(forKey: "savedImage" as! NSData){

    if (Data as Data?) != nil {

      //display Image
       dogImageView.image = UIImage(data: Data as Data)

     }else {
         dogImageView.image = Image Literal
     }
 }

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Используйте If-let для безопасного развертывания.

    if let data = UserDefaults.standard.data(forKey: "savedImage") { // image is present 
        dogImageView.image = UIImage(data: data)
    } else { // image is not present. set a default image
        dogImageView.image = Image Literal
    }
1 голос
/ 30 января 2020

Для swift 4.2, swift 5 +

Напишите класс, например:

import Foundation

public class PreferencesUtils {

    private init() {

    }

    public static func setBoolData(boolValue: Bool, dataName: String) {
        UserDefaults.standard.set(boolValue, forKey: dataName)
    }

    public static func getBoolData(dataName: String)-> Bool{

        let defaults = UserDefaults.standard

        if(defaults.value(forKey: dataName) != nil) {
            return defaults.value(forKey: dataName)! as! Bool

        } else {
            return false
        }
    }

    public static func saveStringData(data: String, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedStringData(dataName: String)-> String{
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! String
        } else {
            return ""
        }
    }

    public static func saveIntData(data : Int, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedIntData(dataName: String) -> Int {
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! Int
        }else{
            return 0
        }
    }

}

Использование:

Сохраните ваши данные в настройках со строкой:

PreferencesUtils.saveStringData(data: "YOUR_DATA", dataName: "YOUR_KEY")

и для получения этих сохраненных данных:

PreferencesUtils.getSavedStringData(dataName: "YOUR_KEY")

Или проверьте эту библиотеку: Link

...