ISO8601DateFormatter doesn’t parse ISO date string

Prior to macOS 10.13 / iOS 11 ISO8601DateFormatter does not support date strings including milliseconds. A workaround is to remove the millisecond part with regular expression. let isoDateString = “2017-01-23T10:12:31.484Z” let trimmedIsoString = isoDateString.replacingOccurrences(of: “\\.\\d+”, with: “”, options: .regularExpression) let formatter = ISO8601DateFormatter() let date = formatter.date(from: trimmedIsoString) In macOS 10.13+ / iOS 11+ a … Read more

iOS 10 Safari: Prevent scrolling behind a fixed overlay and maintain scroll position

Add -webkit-overflow-scrolling: touch; to the #overlay element. Then add this JavaScript code at the end of the body tag: (function () { var _overlay = document.getElementById(‘overlay’); var _clientY = null; // remember Y position on touch start _overlay.addEventListener(‘touchstart’, function (event) { if (event.targetTouches.length === 1) { // detect single touch _clientY = event.targetTouches[0].clientY; } }, … Read more

Is there a writeToFile equivalent for Swift 3’s ‘Data’ type?

Use write(to: fileURL). For example: let fileURL = try! FileManager.default .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent(“test.jpg”) do { try jpegData.write(to: fileURL, options: .atomic) } catch { print(error) } Or, if you really are stuck with a path, convert that to a URL: do { try data.write(to: URL(fileURLWithPath: path), options: .atomic) } catch … Read more

Check internet connection (iOS 10)

import Foundation import SystemConfiguration func isInternetAvailable() -> Bool { var zeroAddress = sockaddr_in() zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) } } var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { return false } let isReachable = flags.contains(.reachable) let needsConnection = flags.contains(.connectionRequired) … Read more