
Whats new in swift 4
Swift 4.0 is a major new release for everyone’s favorite app development language and introduces a variety of features that let us write simpler, safer code. The Swift 4 release is designed around two primary goals: to provide source stability for Swift 3 code and to provide ABI stability for the Swift standard library.
WARNING: Swift 4 is still under active development. Please keep in mind that more features are likely to ship in the months before the final release.
Key Features of Swift 4.0
Multi-Line String Literals — SE-0168
Adding new lines using n and escaping double quotes in the string is not always a pleasant task.
let multiLineString = """This is one of the best feature add in Swift 4It let’s you write “Pradeep Chauhan” new lines without need of “n”"""print(multiLineString)
Smart KeyPaths: Key-Value Coding — SE-0161
You can grab the root object name and drill down up to any property name to get its value. The key path starts with the operator.
struct Address { var city:String var state:String}struct User { var name: String var addresses: [Address] var primaryAddress: Address { return addresses.first! }}
Now If we have a friend object and want to get the value then the following key path syntax should be used.
print(user[keyPath:User.primaryAddress.state])
Swift Archival & Serialization — SE-0166
Good News! Swift 4 comes with built-in encoders and decoders for JSON. JSON <-> Model conversion comes built-in ( Although you can customize that behavior if required ).
Swift 4 introduces a newCodable
protocol that lets you serialize and deserialize custom data types without writing any special code –and without having to worry about losing your value types. Even better, you can choose how you want the data to be serialized: you can use classic property list format or even JSON.
struct Address:Codable { var city:String var state:String}struct User: Codable { var name: String var address: Address}
Encoding ( Model -> JSON )
Let's fill out some detailslet address = Address(city: "Udaipur", state: "Rajasthan")let user = User(name: "pradeep Chauhan", address: address)let encoder = JSONEncoder() // Define JSONEncoderif let encoded = try? encoder.encode(user) { if let json = String(data: encoded, encoding: .utf8) { print(json) }}
Decoding ( JSON -> Model )
let decoder = JSONDecoder()if let decoded = try? decoder.decode(User.self, from: encoded) { print(decoded.name) print(decoded.address)}
Strings are collections again
— SE-0163
This is a small change, but one guaranteed to make a lot of people happy: strings are collections again. This means you can reverse them, loop over them character by character,map()
andflatMap()
them, and more. For example:
let str = "What's new in swift 4"for ch in str { print(ch)}
MutableCollection.swapAt—SE-0173
The new swap function now takes indices of elements that are to be swapped.
var list = ["Pradeep","Chauhan","iOS","Developer"]list.swapAt(1,2)Output.["Pradeep","iOS","Chauhan","Developer"]
One-sided Ranges—SE-0172
Now we can use one side range where the missing side will automatically treated as the start or end of the sequence.
let list = ["Pradeep","Chauhan","iOS","Developer"]let firstTwo = names[..<2]let lastThree = names[1…]print(firstTwo)print(lastThree)Which will produce following output.["Pradeep", "Chauhan"] // [..<2] => [0,1]["Chauhan","iOS","Developer"] // list[2…] => [1,2,3]
Dictionary and Set enhancements—SE-0165
You can create a dictionary using array elements.
let users = ["Ajay", "Ratish", "Vishal"]let usersDictionary = Dictionary(uniqueKeysWithValues: zip(1…, users))print(usersDictionary)
Which will produce the following output.
["0":"Ajay", "1":"Ratish", "2":"Vishal"]
Swift 4.0 is a significant step forward in simplifying app development, making it a preferred choice for many developers. With its improvements, businesses offering Mobile App Development Services can leverage Swift’s power to build high-performance, scalable applications.