2017-01-23 17 views
0

Я хочу написать функцию для сохранения моей структуры. Я знаю, что использование NSCoding - это правильный путь, но доступный только для классов. Но я нашел обходной путь, используя класс, включая сам структуры:Вспомогательный класс для сохранения структур с NSCoding

extension EXIFData { 
    class EXIFDataClass: NSObject, NSCoding { 

     var exifData: EXIFData? 
... 
} 

Но как я использую его (назовем ее)? Например. определяется как

var exif : EXIFData 

или (следующий шаг)

var exifs : [EXIFData] 

Я хотел бы использовать как можно больше фактических особенностей Swift 3.0, потому что я только начинаю. Я нашел несколько разных решений для старых стилей и версий Swift.

ответ

1

Я не уверен, что ваш класс EXIFData, но я думаю, что вам лучше сохранить класс, содержащий объект EXIFData.

Скажем, например, вы должны сохранить кучу различных типов данных, в том числе EXIFData, то вы можете создать класс как следующий, который декодирует, кодирует и инициализирует класс с типом EXIFData:

class UserData: NSObject, NSCoding { 

    var exifData: EXIFData 
    //other variables of data.... 

    required init?(coder aDecoder: NSCoder) { 
     exifData = aDecoder.decodeObject(forKey: "EXIFData") as! EXIFData 
     //decode other values 
    } 

    init(exifData: EXIFData) { 
     self.exifData = exifData 
     //intialize other values 
    } 

    func encode(with aCoder: NSCoder) { 
     aCoder.encode(exifData, forKey: "EXIFData") 
     //encode other values 
    } 

} 

Тогда вы могли бы инициализировать класс следующим образом:

var myUserData = UserData(...) //initialize with EXIFData 

А затем обратитесь к пользователю "EXIFData" как так:

myUserData.exifData 
+0

EXIFData - это структура. Только эти данные необходимы для загрузки и сохранения. И, наконец, я хочу сохранить его массив: [EXIFData] –