2019. 12. 1. 18:20ㆍSwift
//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 |