class Person { // We can define class property here var age = 25 // Implement Class initializer. Initializers are called when a new object of this class is created init() { print(“A new instance of this class Person is created.”) } } // We can now create an instance of class Person - an object - by putting parentheses after the class name let personObj = Person() // Once an instance of Person class is created we can access its properties using the dot “.” syntax. print(“This person age is \(personObj.age)”) import Foundation class Friend : Comparable { let name : String let age : Int init(name : String, age: Int) { self.name = name self.age = age } } func < (lhs: Friend, rhs: Friend) -> Bool { return lhs.age < rhs.age }; func > (lhs: Friend, rhs: Friend) -> Bool { return lhs.age > rhs.age } func == (lhs: Friend, rhs: Friend) -> Bool { var returnValue = false if (lhs.name == rhs.name) && (lhs.age == rhs.age) { returnValue = true } return returnValue } let friend1 = Friend(name: "Sergey", age: 35) let friend2 = Friend(name: "Sergey", age: 30) print("Compare Friend object. Same person? (friend1 == friend2)") func sayHelloWorld() { print("Hello World") } // Call function sayHelloWorld() func printOutFriendNames(names: String...) { for name in names { print(name) } } // Call the printOutFriendNames with two parameters printOutFriendNames("Sergey", "Bill") // Call the function with more parameters printOutFriendNames("Sergey", "Bill", "Max") let simpleClosure = { print("From a simpleClosure") } // Call closure simpleClosure() let fullName = { (firstName:String, lastName:String)->String in return firstName + " " + lastName } // Call Closure let myFullName = fullName("Sergey", "Kargopolov") print("My full name is \(myFullName)") let myDictionary = [String:String]() // Another way to create an empty dictionary let myDictionary2:[String:String] = [:] // Keys in dictionary can also be of type Int let myDictionary3 = [Int:String]() var myDictionary = ["first_name": "Sergey", "last_name": "Kargopolov"] // print to preview print(myDictionary) // Add a new key with a value myDictionary["user_id"] = "f5h7ru0tJurY8f7g5s6fd" // We should now have 3 key value pairs printed print(myDictionary) var myDictionary = ["first_name": "Sergey", "last_name": "Kargopolov"] // Loop through dictionary keys and print values for (key,value) in myDictionary { print("\(key) = \(value)") } class Friend { let name : String let age : Int init(name : String, age: Int) { self.name = name self.age = age } } var friends:[Friend] = [] let friend1 = Friend(name: "Sergey", age: 30) let friend2 = Friend(name: "Bill", age: 35) let friend3 = Friend(name: "Michael", age: 21) friends.append(friend1) friends.append(friend2) friends.append(friend3) printFriends(friends: friends) // Get sorted array in descending order (largest to the smallest number) let sortedFriends = friends.sorted(by: { $0.age > $1.age }) printFriends(friends: sortedFriends) // Get sorted array in ascending order (smallest to the largest number) let sortedFriendsAscendingOrder = friends.sorted(by: { $0.age < $1.age }) printFriends(friends: sortedFriendsAscendingOrder) func printFriends(friends: [Friend]) { for friendEntry in friends { print("Name: \(friendEntry.name), age: \(friendEntry.age)") } } import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Create destination URL let documentsUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL! let destinationFileUrl = documentsUrl.appendingPathComponent("downloadedFile.jpg") //Create URL to the source file you want to download let fileURL = URL(string: "https://s3.amazonaws.com/learn-swift/IMG_0001.JPG") let sessionConfig = URLSessionConfiguration.default let session = URLSession(configuration: sessionConfig) let request = URLRequest(url:fileURL!) let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in if let tempLocalUrl = tempLocalUrl, error == nil { // Success if let statusCode = (response as? HTTPURLResponse)?.statusCode { print("Successfully downloaded. Status code: \(statusCode)") } do { try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl) } catch (let writeError) { print("Error creating a file \(destinationFileUrl) : \(writeError)") } } else { print("Error took place while downloading a file. Error description: %@", error?.localizedDescription); } } task.resume() } } do { // Convert JSON Object received from server side into Swift NSArray. // Note the use "try" if let convertedJsonIntoArray = try JSONSerialization.JSONObjectWithData(data!, options: []) as? NSArray { } } catch let error as NSError { print(error.localizedDescription) } DispatchQueue.global(qos: .userInitiated).async { // Do some time consuming task in this background thread // Mobile app will remain to be responsive to user actions print("Performing time consuming task in this background thread") DispatchQueue.main.async { // Task consuming task has completed // Update UI from this block of code print("Time consuming task has completed. From here we are allowed to update user interface.") } } import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let button = UIButton(type: UIButtonType.system) as UIButton let xPostion:CGFloat = 50 let yPostion:CGFloat = 100 let buttonWidth:CGFloat = 150 let buttonHeight:CGFloat = 45 button.frame = CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight) button.backgroundColor = UIColor.lightGray button.setTitle("Tap me", for: UIControlState.normal) button.tintColor = UIColor.black button.addTarget(self, action: #selector(ViewController.buttonAction(_:)), for: .touchUpInside) self.view.addSubview(button) } func buttonAction(_ sender:UIButton!) { print("Button tapped") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //Create Activity Indicator let myActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray) // Position Activity Indicator in the center of the main view myActivityIndicator.center = view.center // If needed, you can prevent Acivity Indicator from hiding when stopAnimating() is called myActivityIndicator.hidesWhenStopped = false // Start Activity Indicator myActivityIndicator.startAnimating() // Call stopAnimating() when need to stop activity indicator //myActivityIndicator.stopAnimating() view.addSubview(myActivityIndicator) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }