How to use PropertyListEncoder class

Best Swift-snapshot-testing code snippet using PropertyListEncoder

SettingsModel.swift

Source:SettingsModel.swift Github

copy

Full Screen

...93    func setAndSaveAuth(id: String?, auth: String?) {94        togglCredential.auth = auth95        togglCredential.id = id96        let cred = credential(id: id, auth: auth)97        let propertyListEncoder = PropertyListEncoder()98        let encodedCrednetial = try? propertyListEncoder.encode(cred)99        try? encodedCrednetial?.write(to: settingsDirectory.credentialArchieveURL)100        101        if let id = id, let auth = auth {102            print("[Save] id: \(id)")103            print("[Save] auth: \(auth)")104        }105        else {106            print("[Save] id: nil")107            print("[Save] auth: nil")108        }109    }110    111    func setAndSaveProjectList(projects: [[String: Any]]) {112        projectList = []113        for project in projects {114            if project["server_deleted_at"] == nil, let pid = project["id"] as? Int, let name = project["name"] as? String {115                projectList.append(projectInfo(pid: pid, name: name))116            }117        }118        119        let propertyListEncoder = PropertyListEncoder()120        let encodedProjects = try? propertyListEncoder.encode(projectList)121        try? encodedProjects?.write(to: settingsDirectory.projectsArchieveURL)122        123        print("[Save] Projects saved")124        for project in projectList {125            print("[Save] \(project.pid): \(project.name)")126        }127    }128    129    func saveTimerList() {130        let propertyListEncoder = PropertyListEncoder()131        let encodedtimers = try? propertyListEncoder.encode(self.timerList)132        try? encodedtimers?.write(to: settingsDirectory.timersArchieveURL)133        134        print("[Save] Timers saved")135        for timer in self.timerList {136            print("[Save] \(timer.timerName) w pos: \(timer.startTime[.positive]!), neg: \(timer.startTime[.negative]!)")137        }138        GlobalVar.settings.syncTimerList()139    }140    141    func saveMiscs() {142        let propertyListEncoder = PropertyListEncoder()143        let miscs = miscInfo(currTimerID: currTimerID, dontSleep: dontSleep, tickingSound: tickingSound)144        let encodedMiscs = try? propertyListEncoder.encode(miscs)145        try? encodedMiscs?.write(to: settingsDirectory.miscsArchieveURL)146        147        print("[Save] Miscs saved")148    }149    150    func sendTogglInfo(replyHandler: (([String : Any]) -> Void)?) {151        print("Sending Toggl Credentials")152        let propertyListEncoder = PropertyListEncoder()153        154        let currCredential = togglCredential155        let currProjectList = projectList156        let currTogglInfo = togglInfo(credential: currCredential, projectList: currProjectList)157        158        if let encodedTogglInfo = try? propertyListEncoder.encode(currTogglInfo) {159            if let handler = replyHandler {160                let replyMessage = [WCSessionMessageType.togglInfo: encodedTogglInfo]161                handler(replyMessage)162            }163            else {164                let message = [WCSessionMessageType.togglInfo: encodedTogglInfo]165                WCSession.default.sendMessage(message, replyHandler: nil, errorHandler: nil)166            }167        }168    }169    170    func deleteTimer(index: Int) {171        let timer = timerList[index]172        timerList.remove(at: index)173        deletedTimerList.append(timer)174        GlobalVar.settings.saveTimerList()175        176        for deletedTimer in deletedTimerList {177            print("[Deleted] \(deletedTimer.timerName) w created: \(deletedTimer.createdDate) modified: \(deletedTimer.modifiedDate)")178        }179        //TODO: impelement ability to save deleted timer list as well180    }181    182    func syncTimerList() {183        print("Sending TimerList to other device")184        let sendSyncListInfo = syncListInfo(timerList: timerList, deletedTimerList: deletedTimerList)185        let propertyListEncoder = PropertyListEncoder()186        if let encodedTimers = try? propertyListEncoder.encode(sendSyncListInfo) {187            let message = [WCSessionMessageType.timerList: encodedTimers]188            WCSession.default.sendMessage(message, replyHandler: { (receivedMessage) in189                print("Received TimerList from other device")190                191                let propertyListDecoder = PropertyListDecoder()192                if let data = receivedMessage[WCSessionMessageType.timerList] as? Data,193                    let receivedTimerList = try? propertyListDecoder.decode([TimerModel].self, from: data) {194                    195                    self.timerList = receivedTimerList196                    for timer in receivedTimerList {197                        print("[Resulting] \(timer.timerName) w created: \(timer.createdDate) modified: \(timer.modifiedDate)")198                    }199                    self.deletedTimerList = []200                }201            }, errorHandler: nil)202        }203    }204    205    func receiveTogglInfo(receivedTogglInfo: togglInfo) {206        togglCredential = receivedTogglInfo.credential207        if let id = togglCredential.id, let auth = togglCredential.auth {208            print("[Received] id: \(id)")209            print("[Received] auth: \(auth)")210        }211        projectList = receivedTogglInfo.projectList212        for project in projectList {213            print("[Received] \(project.pid): \(project.name)")214        }215    }216    217    func receiveTimerList(receivedSyncListInfo: syncListInfo, replyHandler: (([String : Any]) -> Void)?) {218        let receivedTimerList = receivedSyncListInfo.timerList219        let receivedDeletedTimerList = receivedSyncListInfo.deletedTimerList220        221        for timer in receivedTimerList {222            print("[Received] \(timer.timerName) w created: \(timer.createdDate) modified: \(timer.modifiedDate)")223        }224        for timer in timerList {225            print("[Existing] \(timer.timerName) w created: \(timer.createdDate) modified: \(timer.modifiedDate)")226        }227        228        229        for receivedDeletedTimer in receivedDeletedTimerList {230            for (existingIndex, existingTimer) in timerList.enumerated() {231                let comparison = existingTimer.compare(timerModel: receivedDeletedTimer)232                switch(comparison) {233                case .different:234                    continue235               default:236                    timerList.remove(at: existingIndex)237                    break238                }239            }240        }241        242        for (receivedIndex, receivedTimer) in receivedTimerList.enumerated() {243            var newTimer = true244            for (existingIndex, existingTimer) in timerList.enumerated() {245                let comparison = existingTimer.compare(timerModel: receivedTimer)246                switch(comparison) {247                case .same:248                    print("Received: \(receivedIndex) is same as existing: \(existingIndex)")249                    newTimer = false250                    break251                case .older:252                    print("Received: \(receivedIndex) is older than existing: \(existingIndex)")253                    newTimer = false254                    break255                case .newer:256                    print("Received: \(receivedIndex) is newer than existing: \(existingIndex)")257                    print("Updating existing: \(existingIndex)")258                    timerList[existingIndex] = receivedTimer259                    newTimer = false260                    break261                case .different:262                    continue263                }264            }265            if newTimer {266                print("Adding received: \(receivedIndex) to timer list")267                timerList.append(receivedTimer)268            }269        }270        for timer in timerList {271            print("[Resulting] \(timer.timerName) w created: \(timer.createdDate) modified: \(timer.modifiedDate)")272        }273        274        if let handler = replyHandler {275            let propertyListEncoder = PropertyListEncoder()276            if let encodedTimers = try? propertyListEncoder.encode(self.timerList) {277                let message = [WCSessionMessageType.timerList : encodedTimers]278                handler(message)279            }280        }281    }282}283struct directories {284    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!285    var credentialArchieveURL: URL {286        return documentsDirectory.appendingPathComponent("credential").appendingPathExtension("plist")287    }288    var projectsArchieveURL: URL {289        return documentsDirectory.appendingPathComponent("projects").appendingPathExtension("plist")...

Full Screen

Full Screen

Inventory.swift

Source:Inventory.swift Github

copy

Full Screen

...41	}42}43extension Inventory {44	func writeInventoryToUserData() {45		let propertyListEncoder = PropertyListEncoder()46		do {47			let inventoryData: [Product] = self.productArray48			let data = try propertyListEncoder.encode(inventoryData)49			UserDefaults.standard.set(data, forKey: "data")50		}51		catch {52			print(error)53		}54	}55	func removeProductFromInventoryMaster(product: Product) {56		guard let indexOfProduct = self.productArray.firstIndex(of: product) else { return }57		self.productArray.remove(at: indexOfProduct)58		let propertyListEncoder = PropertyListEncoder()59		do {60//			let inventory: Inventory = self61			let products: [Product] = self.productArray62			let data = try propertyListEncoder.encode(products)63			UserDefaults.standard.set(data, forKey: "data")64		}65		catch {66			print(error)67		}68	}69	func addProductToInventoryMaster(product: Product) {70		self.productArray.append(product)71		let propertyListEncoder = PropertyListEncoder()72		do {73			let inventoryData: [Product] = self.productArray74			let data = try propertyListEncoder.encode(inventoryData)75			UserDefaults.standard.set(data, forKey: "data")76		}77		catch {78			print(error)79		}80	}81}82extension Inventory {83	func saveInventoryToCloud() {84		let database = CKContainer.default().privateCloudDatabase85		let encoder = PropertyListEncoder()86		do {87			let inventoryData = self.productArray88			let dataEncodedForCloud = try encoder.encode(inventoryData)89			let newInventoryForCloud = CKRecord(recordType: "Inventory", recordID: CKRecord.ID(recordName: "InventoryData"))90			newInventoryForCloud.setValue(dataEncodedForCloud, forKey: "inventoryData")91			database.save(newInventoryForCloud) { (record, error) in92				guard record != nil else { return }93				print("saved inventory to cloud \(record.debugDescription)", error?.localizedDescription ?? "No errors in saving inventory to cloud. This method should not be in use")94			}95		}96		catch {97			print(error)98		}99	}...

Full Screen

Full Screen

JSONManager.swift

Source:JSONManager.swift Github

copy

Full Screen

...12        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!13        14        let archiveURL = documentsDirectory.appendingPathComponent("workouts").appendingPathExtension("plist")15        16        let propertyListEncoder = PropertyListEncoder()17        18        let encodedWorkouts = try? propertyListEncoder.encode(workout)19        20        try? encodedWorkouts?.write(to: archiveURL, options: .noFileProtection)21        22    }23    24    func readWorkoutsFromDisk() -> JSONWorkouts? {25        26        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!27        28        let archiveURL = documentsDirectory.appendingPathComponent("workouts").appendingPathExtension("plist")29        30        let propertyListDecoder = PropertyListDecoder()31        32        if let retrievedWorkoutsData = try? Data(contentsOf: archiveURL), let decodedWorkouts = try? propertyListDecoder.decode(JSONWorkouts.self, from: retrievedWorkoutsData) {33            return decodedWorkouts34        }35        return nil36    }37    38    func writeExercisesToDisk(exercises: [Exercise]) {39        40        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!41        42        let archiveURL = documentsDirectory.appendingPathComponent("exercises").appendingPathExtension("plist")43        44        let propertyListEncoder = PropertyListEncoder()45        46        let encodedExercises = try? propertyListEncoder.encode(exercises)47        48        try? encodedExercises?.write(to: archiveURL, options: .noFileProtection)49        50    }51    52    func readExercisesFromDisk() -> [Exercise]? {53        54        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!55        56        let archiveURL = documentsDirectory.appendingPathComponent("exercises").appendingPathExtension("plist")57        58        let propertyListDecoder = PropertyListDecoder()...

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import Foundation2import SnapshotTesting3let encoder = PropertyListEncoder()4let data = try! encoder.encode(["name": "John"])5let xml = String(data: data, encoding: .utf8)!6assertSnapshot(matching: xml, as: .lines)7import Foundation8import SnapshotTesting9let decoder = PropertyListDecoder()10let data = xml.data(using: .utf8)!11let dict = try! decoder.decode([String: String].self, from: data)12assertSnapshot(matching: dict, as: .dump)13import Foundation14import SnapshotTesting15let encoder = JSONEncoder()16let data = try! encoder.encode(["name": "John"])17let json = String(data: data, encoding: .utf8)!18assertSnapshot(matching: json, as: .lines)19import Foundation20import SnapshotTesting21let decoder = JSONDecoder()22    {23    }24let data = json.data(using: .utf8)!25let dict = try! decoder.decode([String: String].self, from: data)26assertSnapshot(matching: dict, as: .dump)27import Foundation28import SnapshotTesting29let decoder = JSONDecoder()30    {31    }32let data = json.data(using: .utf8)!33let dict = try! decoder.decode([String: String].self, from: data)34assertSnapshot(matching: dict, as: .dump)35import Foundation36import SnapshotTesting37let decoder = JSONDecoder()38    {39    }40let data = json.data(using: .utf8)!

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import SnapshotTesting2import XCTest3final class SnapshotTest: XCTestCase {4    func testExample() {5        let encoder = PropertyListEncoder()6        let data = try! encoder.encode(["key1": "value1", "key2": "value2"])7        assertSnapshot(matching: data, as: .binary)8    }9}10import SnapshotTesting11import XCTest12final class SnapshotTest: XCTestCase {13    func testExample() {14        let encoder = PropertyListEncoder()15        let data = try! encoder.encode(["key1": "value1", "key2": "value2"])16        assertSnapshot(matching: data, as: .data)17    }18}

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import XCTest2import SnapshotTesting3@testable import PropertyListEncoder4class PropertyListEncoderTests: XCTestCase {5    func testPropertyListEncoder() {6        let encoder = PropertyListEncoder()7        let encoderData = try! encoder.encode(["a": "b"])8        assertSnapshot(matching: encoderData, as: .binary)9    }10}11import XCTest12import SnapshotTesting13@testable import PropertyListEncoder14class PropertyListEncoderTests: XCTestCase {15    func testPropertyListEncoder() {16        let encoder = Foundation.PropertyListEncoder()17        let encoderData = try! encoder.encode(["a": "b"])18        assertSnapshot(matching: encoderData, as: .binary)19    }20}

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import Foundation2import XCTest3import SnapshotTesting4class PropertyListEncoderTests: XCTestCase {5    func testPropertyListEncoder() throws {6        let encoder = PropertyListEncoder()7        let data = try encoder.encode(["foo": "bar"])8        assertSnapshot(matching: data, as: .propertyList)9    }10}11class PropertyListDecoderTests: XCTestCase {12    func testPropertyListDecoder() throws {13        let decoder = PropertyListDecoder()14        let data = try decoder.decode([String: String].self, from: Data())15        assertSnapshot(matching: data, as: .propertyList)16    }17}18import Foundation19import XCTest20import SnapshotTesting21class PropertyListEncoderTests: XCTestCase {22    func testPropertyListEncoder() throws {23        let encoder = PropertyListEncoder()24        let data = try encoder.encode(["foo": "bar"])25        assertSnapshot(matching: data, as: .propertyList)26    }27}28class PropertyListDecoderTests: XCTestCase {29    func testPropertyListDecoder() throws {30        let decoder = PropertyListDecoder()

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import Foundation2struct Person: Codable {3}4var person = Person(name: "John", age: 25)5let encoder = PropertyListEncoder()6let data = try! encoder.encode(person)7let plist = NSString(data: data, encoding: String.Encoding.utf8.rawValue)8print(plist!)9import Foundation10struct Person: Codable {11}12let decoder = PropertyListDecoder()13let data = try! Data(contentsOf: URL(fileURLWithPath: "1.plist"))14let person = try! decoder.decode(Person.self, from: data)15print(person)16import Foundation17struct Person: Codable {18}19var person = Person(name: "John", age: 25)20let encoder = JSONEncoder()21let data = try! encoder.encode(person)22let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)23print(json!)24import Foundation25struct Person: Codable {26}27let decoder = JSONDecoder()28let data = try! Data(contentsOf: URL(fileURLWithPath: "3.json"))29let person = try! decoder.decode(Person.self, from: data)30print(person)31import Foundation32struct Person: Codable {33}34let data = try! Data(contentsOf: URL(fileURLWithPath: "1.plist"))35let plist = try! PropertyListSerialization.propertyList(from: data, options: [], format: nil)36print(plist)

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import Foundation2let encoder = PropertyListEncoder()3let data = try! encoder.encode(["Hello": "World"])4let string = String(data: data, encoding: .utf8)!5print(string)6import Foundation7let data = try! PropertyListSerialization.data(fromPropertyList: dictionary,8let string = String(data: data, encoding: .utf8)!9print(string)10import Foundation11let data = try! PropertyListSerialization.data(fromPropertyList: dictionary,12let string = String(data: data, encoding: .utf8)!13print(string)14import Foundation15let data = try! PropertyListSerialization.data(from

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import Foundation2import SnapshotTesting3struct Person: Codable {4}5    Person(name: "John", age: 55),6    Person(name: "Jane", age: 42),7    Person(name: "Bob", age: 33)8let encoder = PropertyListEncoder()9let data = try! encoder.encode(people)10try! data.write(to: URL(fileURLWithPath: "people.plist"))11assertSnapshot(matching: data, as: .propertyList)12import Foundation13import SnapshotTesting14let decoder = PropertyListDecoder()15let people = try! decoder.decode([Person].self, from: Data(contentsOf: URL(fileURLWithPath: "people.plist")))16assertSnapshot(matching: people, as: .dump)17import Foundation18import SnapshotTesting19struct Person: Codable {20}21    "John": Person(name: "John", age: 55),22    "Jane": Person(name: "Jane", age: 42),23    "Bob": Person(name: "Bob", age: 33)24let encoder = PropertyListEncoder()25let data = try! encoder.encode(people)26try! data.write(to: URL(fileURLWithPath: "people.plist"))27assertSnapshot(matching: data, as: .propertyList)

Full Screen

Full Screen

PropertyListEncoder

Using AI Code Generation

copy

Full Screen

1import XCTest2import SnapshotTesting3@testable import SnapshotTesting4class SnapshotTesting: XCTestCase {5    func testEncoding() throws {6        let encoder = PropertyListEncoder()7        let encodedData = try encoder.encode(data)8        assertSnapshot(matching: encodedData, as: .binary)9    }10}11import XCTest12import SnapshotTesting13@testable import SnapshotTesting14class SnapshotTesting: XCTestCase {15    func testDecoding() throws {16        let encoder = PropertyListEncoder()17        let encodedData = try encoder.encode(data)18        let decoder = PropertyListDecoder()19        let decodedData = try decoder.decode([Int].self, from: encodedData)20        XCTAssertEqual(data, decodedData)21    }22}23import XCTest24import SnapshotTesting25@testable import SnapshotTesting26class SnapshotTesting: XCTestCase {27    func testDecoding() throws {28        let encoder = PropertyListEncoder()29        let encodedData = try encoder.encode(data)30        let decoder = PropertyListDecoder()31        let decodedData = try decoder.decode([Int].self, from: encodedData)32        XCTAssertEqual(data, decodedData)33    }34}35import XCTest36import SnapshotTesting

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Swift-snapshot-testing automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful