패스트캠퍼스) ios 개발 챌린지

[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 22회차 미션

student513 2020. 11. 23. 14:56

프로토콜은 일종의 규약이다. 네트워크에서 익숙하게 쓰이는 단어이다. 스위프트의 함수에는 프로토콜을 선언하여, 해당 함수를 어떻게 사용해야할지 알려줄 수 있다.

여기서 CustomStringConvertible과 var description이 프로토콜이다. 

// CustomStringConvertible

struct Lecture: CustomStringConvertible {
    var description: String {
        return "Title: \(name), Instructor: \(instructor)"
    }
    
    let name: String
    let instructor: String
    let numOfStudent: Int
}

let lec1 = Lecture(name: "iOS Basic", instructor: "Jason", numOfStudent: 5)

// 구조체 lec1을 참조할 경우
// Title: iOS Basic, Instructor: Jason
print(lec1)

 

클래스나 구조체는 크게 데이터와 메소드 부분으로 나뉜다.

데이터는 말 그대로 데이터를 저장하고 있는 자료구조나 변수로 구성되어있다.

메소드는 함수로 구성되어있으며, 데이터에 접근하거나 수정을 하기 위해서는 메소드를 거쳐야만 한다.

이것을 객체지향형 프로그래밍이라 한다.

그리하여 메소드 부분은 데이터를 이용하여 연산하기 때문에 computed property라고 한다.

데이터 부분은 정보를 담고있기 때문에 Stored property라고 한다.

struct Person {
    var fullName: String {
        get {
            return "\(firstName) \(lastName)"
        }

        set {
            // newValue "Jay Park"
            if let firstName = newValue.components(separatedBy: " ").first {
                self.firstName = firstName
            }

            if let lastName = newValue.components(separatedBy: " ").last {
                self.lastName = lastName
            }

        }
    }
    
    static let isAlien: Bool = false
}

person.fullName = "Jay Park"

이 코드는 get, set을 이용한 구조체인데, 구조체의 형식을 지정해준다.

느닷 없이 나와서 이해가 좀 어렵긴 했지만 코드를 설명하자면 이렇다.

 

  1. 구조체 Person의 인스턴스 person에 "Jay Park"이라는 파라미터가 입력된다
  2. "Jay Park"은 newValue라는 이름으로 get으로 들어간다.
  3. 만약 입력된 파라미터가 공백을 기준으로 앞 뒤에 단어가 있는 형태라면, 앞 단어는 firstName, 뒷 단어는 lastName으로 반환한다.
  4. 반환 값은 set으로 입력된다.
  5. newValue는 separatedBy에 의해 공백 문자 " "를 기준으로 component로 나눠진다.
  6. 그 중 first component는 firstName에, last component는 lastName에 할당된다.

 

인스턴스 프로퍼티는 해당 객체에서 복제된 데이터 각각이 갖고 있는 값으로,

위의 코드에서는 fullName에 해당한다.

 

타입 프로퍼티는 해당 객체가 공통적으로 갖고 있는 값으로,

위의 코드에서는 isAlien에 해당한다.

어떤 Person 구조체 타입의 변수든지 isAlien은 초기에 false값을 갖고 있을 것이다.

 

 

올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq