======================New features on Swift2===========================

1) Checking OS support for a specific API (When you're using an API function/class... how to check if it's supported on IOS8 or ios7, ...)

Suppose we want to use NSDocument class somewhere in our codes ,in the good old time we did that:

if NSClassFromString("NSDocument") != nil {

    // iOS 8 or up

} else{

    // Earlier iOS versions


Now you cand simply do that:

if #available(iOS 8, *){// iOS 8 or up

    // iOS 8 or up

    let doc = NSDocument()


} else {

    // Earlier iOS versions




2)Protocol Extension:

Now in Swift2 you can add extend functionality of a protocol like we did for class/structures/enum...

by Extension

protocol Greeting {

func welcome() ->Void


class Politeness:Greeting {

func welcome() ->Void{

print("Hello , welcome")



let pol = Politeness()

pol.welcome()  // print "Hello , welcome"

add extension:

Extension Greeting {

func warmWelcome()->(){

print("Hi darling , welcome! happy to see you again")



pol.warmWelcome()//print "Hi darling , welcome! happy to see you again"


3) do..while loop replaced by repeat..while

var i=0






4) Introduction of great guard/else word key

guard/else is a new pattern for condition checking syntax is :

guard A else{

//do something if condition not meet



//do something on A if everything is good!

In fact guard let you focus on only objects/data who are safe and passed the checking!

there are two advantage on this :

a-function body are much more clean and easy to track errors!

b-optional functions arguments are automatically unwrapped after condition meet. example

func useTraditionalIf(x: Int?) {

    if let x = x where x > 0 {

        // Do stuff with x




    // Value requirements not met, do something


func useGuard(x: Int?) {

    guard let x = x where x > 0 else {

        // Value requirements not met, do something




    // Do stuff with x



guard has a similar behaviour with assert()


5) println() replaced by print() 

to have the line breaking like before use appendNewline boolean flag,so equivalent of old println becomes

print("Engine started", appendNewline: true)

Protocol Extension:

In Swift 2 , protocol can be extended by Extension as we have seen in fundamental base class

below we intruduce the concept by a very simple example

let’s start by declaration of a basic protocol ,suppose:

protocol BasicAdder{

    func display()

    func calculate()



class Adder: BasicAdder{

    var num1:Int

    var num2:Int

    var result:Int!


    num1 = number1

    num2 = number2



    func display(){




    func calculate() {

        result = num1+num2



let adder = Adder(number1: 5,number2: 8)



Now let’s make an extension on our protocol by adding a multiplyer function

extension BasicAdder{

    func multiply(number1:Int,number2:Int)->Int{

        return number1*number2



Now without any change to our class we can call multiply

let result2 = adder.multiply(5, number2: 8)




 © Xosrov 2016