// This is a list of nice tips and tricks I discovered //MARK: Tip #1 let task = urlSession.dataTask(with: url) { data, _, error switch error { case .error(let error as NSError) where error.code == NSURLErrorNotConnectedToInternet: presenter.showOfflneError() case .error(let error): presenter.showNetworkTaskError(with: error) case .noError() presenter.displayData(data) } } //In swift 3 NSError domains and codes can be used for pattern matching //MARK: Tip #2 let task = urlSession.dataTask(with: url) { data, _, error if let error = error { switch error { case URLError.notConnectedToInternet: presenter.showOfflneError() case .error(let error): presenter.showNetworkTaskError(with: error) } } presenter.displayData(data) } //MARK: Tip #3 // Convert String to Data let string = "String" let data = string.data(using:.utf8) // cleaner way let data = Data(string.utf8) //MARK: Tip #3 //elementsEqual() on unordered collections uses elemetns order for comparison var set_1: Set = Set(1...5) var set_2: Set = Set(1...5).reversed() set_1==set_2 // true set_1.elementsEqual(set_2) // false