iOS Swift - Structure/ Class

longlivedrgn·2022년 8월 23일
0

swift문법

목록 보기
12/36
post-thumbnail

Structure

  • Structure 예)
struct Person {
    var name: String
    var age: Int
    
    func speak() {
        print("Hello")
    }
}
  • 새로운 instance 생성하기
let p = Person(name: "Steve", age: 50)
  • instance 변수에 접근하기
p.name
p.age
  • 메소드 호출하기

    메소드와 함수의 차이!
    메소드 -> 메소드는 instance 뒤에 .를 통하여 호출이 가능하다.
    함수 -> 함수는 instance 필요없이 혼자 호출이 가능

  • 아래와 같은 방식으로 structure의 메소드를 호출할 수 있다.

p.speak()

Class

  • 클래스 예)
class Person {
    var name = "John Doe"
    var age = 0
    
    func speak() {
        print("Hello")
    }
}
  • Instance 생성하기
let p = Person()
  • 메소드 호출하기
p.speak()

Initializer Syntax

  • 아래와 같이 두개의 생성자를 가진 class를 만들자
  • 한개의 생성자는 parameter를 가지지 않고, 한개의 생성자는 parameter를 가진다.
  • init은 말 그대로 var의 초기값을 설정해주는 것이다!
class Position {
    var x: Double
    var y: Double
    
    init() {
        x = 0.0
        y = 0.0
    }
    
    init(value: Double){
        x = value
        y = value
    }
}
  • Instance를 만들어보자

1) parameter가 없는 생성자를 사용( init() )

let a = Position()
a.x // 0.0
a.y // 0.0

2) parameter가 있는 생성자를 사용

let b = Position(value: 100)
b.x // 100
b.y // 100

Value Types and Reference Types

Value Type -> Structure

  • Structure의 경우 복사를 한다!
truct PositionValue {
    var x = 0.0
    var y = 0.0
}

// 기본 생성자 생성
var v = PositionValue()

// 복사하기
var v2 = v

v2.x = 12
v2.y = 34

// 값이 변한다!
v // 0, 0
v2 // 12, 34

Reference Type -> Class

-> Class의 경우 참조 형식으로 복사가 아닌 참조를 하므로 복사본이 아니므로 바뀌면 원본도 바뀐다!

class PositionObject {
    var x = 0.0
    var y = 0.0
}

var o = PositionObject()

var o2 = o


o2.x = 12
o2.y = 34

o // 12 , 34
o2 // 12, 34

Nested Types

  • 클래스안에 스트럭쳐 나 enum이 들어갈 경우 .를 통하여 가져온다!
class One {
    struct Two {
        enum Three {
            case a
            
            class Four {
//                var a = Four()
            }
        }
    }
    // class 안에서는 class 안의 struct를 가져올 수 있다!
    var a = One.Two()
}

let two: One.Two = One.Two()

let love : One.Two.Three.Four = One.Two.Three.Four()

let like =  One.Two.Three.a

0개의 댓글