Last active
June 7, 2021 07:39
-
-
Save runys/8a1a05f42d25a66b140a37e08c21b0fb to your computer and use it in GitHub Desktop.
How to read Property Lists in iOS 10 with Swift 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
O que é um Property List (PList)? | |
- Ref: [Apple: About Info.plist](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html) | |
- Ref: [Apple: Introduction to Property Lists](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html) | |
- Ref: [](https://makeapppie.com/2016/02/11/how-to-use-property-lists-plist-in-swift/) | |
É um tipo de arquivo que pode armazenar informações de maneira estruturada. | |
Um plist é um arquivo que utiliza um notação XML para organizar a informação. | |
Os tipos de informação podemos armazenar são: | |
- Array <array>...</array> | |
- Dicionário <dict> <key></key> ... </dict> | |
- String <string></string> | |
- Data <data></data> | |
- Date <date></date> | |
- Inteiros <int></int> | |
- Double <real></real> | |
- Bool <true/> ou <false/> | |
Para criar o seu property list basta criar um novo arquivo plist (cmd + N) e editá-lo. | |
Agora vamos ver como fazemos para: | |
- Abrir um arquivo plist | |
- Pegar informação armazenada no plist | |
*/ | |
// Criamos a classe PListManager para ser responsável por ler Property Lists e retornar para nós | |
// as informações armazendas nele. | |
class PListManager { | |
/** | |
Método que retorna, se possível, um dicionário com as informações armazenadas na property list. | |
Se o root do property list não for um dicionário, ele retorna um dicionário vazio. | |
*/ | |
static func readDictionaryPropertyList(named fileName: String) -> [String: AnyObject] { | |
// Primeira coisa, definimos o formato do property list. | |
// Vamos trabalhar com XML inicialmente, mas esse formato pode ser alterado pelo método de serialização | |
var format = PropertyListSerialization.PropertyListFormat.xml | |
// A propriedade que irá armazenar o dicionário na property list | |
var plistData = [String:AnyObject]() | |
// Aqui defenimos o caminho do arquivo que vamos abrir. | |
// Bundle representa o app em si e vai ser responsável por trazer o endereço do arquivo dentro do app, para que possamos lê-lo | |
let plistPath: String? = Bundle.main.path(forResource: fileName, ofType: "plist")! | |
// Nós usamos o FileManager para pegar o conteúdo do nosso arquivo PList | |
// Esse conteúdo vem pra gente no formato de Data | |
let plistXML = FileManager.default.contents(atPath: plistPath!)! | |
// O próximo passo é serializar nosso Data para um dicionário propriamente dito utilizando PropertyListSerialization. Porém pode ser que erros de sintaxe ou erros de outros tipos impeçam nossa serialização de dar certo. | |
// Por isso temos que fazer a serialização em um bloco try-catch, pois a serialização lança exeções quando esses problemas acontecem. | |
do { | |
// Aqui serializamos nosso plistXML (Data) para um dicionário [String: AnyObject] e armazenamos o resultado no nosso plistData | |
plistData = try PropertyListSerialization.propertyList(from: plistXML, options: .mutableContainersAndLeaves, format: &format) as! [String: AnyObject] | |
} catch let error { | |
print("Error reading plist: \(error) format: \(format)") | |
} | |
// Por fim retornamos o dicionário proveniente da nossa serialização. | |
// Caso algo de errado, retornamos um dicionário vazio. | |
return plistData | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment