Swift) object & class

2019. 12. 1. 18:20Swift

반응형

//object & class

class Shape{

    var numberOfSides:Int = 0

    var name: String

    

    init(name: String){

        self.name = name

    }

    func simpleDescription() -> String{

        return "A shape with \(numberOfSides) sides"

    }

}

 

var shape = Shape(name: "kay")

shape.numberOfSides = 7

var shapeDescription = shape.simpleDescription()

 

//하위클래스:상위클래스

class Square: Shape{

    var sideLength: Double

    init(sideLength: Double, name: String){

        self.sideLength = sideLength

        super.init(name: name)

        numberOfSides = 4

    }

    func area() -> Double{

        return sideLength*sideLength

    }

    override func simpleDescription() -> String{

        return "A square with sides of length \(sideLength)."

    }

}

let test = Square(sideLength: 5.2, name: "my test square")

test.area()

test.simpleDescription()

 

//getter, setter

class EquilateralTriangle: Shape{

    var sideLength: Double = 0.0

    init(sideLength: Double, name: String){

        self.sideLength = sideLength

        super.init(name: name)

        numberOfSides = 3

    }

    var perimeter: Double{

        get{

            return 3.0*sideLength

        }set{

            sideLength = newValue/3.0

        }

    }

    override func simpleDescription() -> String {

        return "An equilateral triangle with sides of length \(sideLength)"

    }

}

var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")

print(triangle.perimeter)

triangle.perimeter = 9.9;

print(triangle.perimeter)

 

//willset: before setting a new value

//didset: after setting a new value

class TriangleAndSquare{

    var triangle: EquilateralTriangle{

        willSet{

            square.sideLength = newValue.sideLength

        }

    }

    var square: Square{

        willSet{

            triangle.sideLength = newValue.sideLength

        }

    }

    init(size: Double, name: String){

        square = Square(sideLength: size, name: name)

        triangle = EquilateralTriangle(sideLength: size, name: name)

    }

}

 

var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")

print(triangleAndSquare.square.sideLength) //10.0

print(triangleAndSquare.triangle.sideLength) //10.0

 

triangleAndSquare.square = Square(sideLength: 50, name: "Larger square")

print(triangleAndSquare.square.sideLength)

 

//optional value를 사용시에, 메서드,인자 전에 쓸수 있음.

//만약, ?전의 값이 nil이라면, ?이후의 모든 것은 무시되고, 전체 표현의 가치는 nil이다.

//그렇지 않으면, optional value은 unwrapped되고, ?이후의 모든 값은 포장되지 않은 값에 따라 작용함.

//아래의 경우는 표현전체의 가치는 optional value임.

let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")

let sideLength = optionalSquare?.sideLength

반응형

'Swift' 카테고리의 다른 글

Swift) function  (0) 2019.12.01
Swift) if-else, 반복문(for, for-in, while ..)  (0) 2019.10.06
Swift) 변수, 상수, 배열, Dictionary  (0) 2019.09.29