2016-06-21 2 views
2

메서드를 지정하지 않고도 다음 코드 블록을 올바르게 실행할 수 있습니다. 이 경우 메서드는 어떤 용도로 사용됩니까?왜 init 메소드를 지정해야합니까?

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name 
     self.age = age 
    } 

} 

let somePerson = Person(name: "Sam", age: 21) 
somePerson.name 
somePerson.age 

감사합니다.

답변

1

구조의 신속한 동작입니다. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

"구조 유형에서 (구조 유형에 대한 Memberwise 이니셜)

페이지는 자동으로 자신의 사용자 정의 초기화 중 하나를 정의하지 경우 memberwise 이니셜을받을 수 있습니다. 기본 초기화와는 달리, 구조가 수신 기본 값이없는 속성이 저장된 경우에도 구성원 우선 초기화 도구 "

memberwise init 메소드를 지정하지 않으면 자동으로 생성됩니다. 선언 한 init은 단순한 init 이상을 수행 할 수 있습니다. 예를 들어 :

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name.uppercaseString() 
     self.age = age + 22 
     //and more works ... 
    } 

} 
1

으로는

Swift initializers

스위프트가 어떤 구조 또는 이 모든 속성에 대한 기본값을 제공하지 않는 클래스의 기본 초기화를 제공하는이 문서에서 지적 적어도 하나의 초기화 프로그램 자체를 에 제공하십시오. 기본 이니셜 라이저 인 은 모든 속성이 기본값 인 값으로 설정된 새 인스턴스를 만듭니다.

자신의 사용자 지정 초기화 프로그램을 정의하지 않으면 구조체 형식이 자동으로 memberwise 이니셜 라이저를받습니다. 기본 초기 설정과 달리 기본 값이없는 속성이 저장된 경우에도 구조는 memberwise 초기화 프로그램을받습니다.

그래서 하나의 init 메소드를 작성하면 기본 이니셜 라이저를 작성해야합니다 (존재하는 경우).

기본 이니셜 라이저 만 필요한 경우 생략 할 수 있습니다.

+0

... *는 기본값을 제공합니다 *는 실제로 질문에 해당하지 않습니다. – vadian

+0

예, 관련 섹션을 포함하도록 확장되었습니다 ... –

0

더 이상 필요하지 않습니다. Memberwise 초기화는 Swift 2.2의 새로운 기능입니다. 저자는 이전 버전의 Swift에이 코드를 작성했거나 더 이상 필요하지 않음을 알지 못했습니다.