воскресенье, 7 июня 2020 г.

Swift, Classes, Inheritance

Online Swift Playground 
 
//Classes (Reference type)
class Point: CustomStringConvertible{
    var x:Int
    var y:Int

    init(x:Int, y:Int){
        self.x = x
        self.y = y
    }

    var description: String {
        "Point [x: \(self.x), y: \(self.y)]"
    }
}

var p1 = Point(x: 1, y: 1)
var p2 = p1 //refs on assignment
print(p1)
print(p2)

p1.x = 3; p1.y = 3
p2.x = 8; p2.y = 8
print(p1)
print(p2)

//equality
print(p1.x == p2.x) //values
print(p1 === p2) //pointers

extension Point {
    func sub(p:Point){
        self.x -= p.x
        self.y -= p.y
    }
}

p2.sub(p: p1)
print(p2)
  
//Properties, Methods
class Point{
    //Properties
    var x:Int
    var y:Int
 
    //Initializer - constructor
    init(x:Int, y:Int) {
        self.x = x
        self.y = y
    }

    //Method
    func add(p:Point){
        self.x += p.x
        self.y += p.y
    }
}
   
var p1 = Point(x:5,y:5)
print(p1.x, p1.y)

var p2 = Point(x:5,y:5)
p1.add(p:p2)
print(p1.x, p1.y)

//Inheritance
class Character{
    private var name:String = ""
       
    internal init(name:String){
        self.name = name
    }

    public func getName() -> String {
        self.name
    }

    public func hi() -> String {
        " "
    }
}

final class Hero: Character{
    private var health:Int = 0

    public init(name:String, health:Int){
        //super init after self init!!!
        self.health = health
        super.init(name: name)
    }

    public func getHealth() -> Int {
        self.health
    }

    override func hi() -> String {
        "Hi there"
    }
}

let char = Hero(name:"Mike", health:3)
print("\(char.hi()), I'm \(char.getName()) with \(char.getHealth()) lives")

Комментариев нет:

Отправить комментарий