[swift] Swift의 구조체에 대해 멤버 이니셜 라이저를 기본적으로 공개하려면 어떻게해야합니까?

구조체를 정의하는 신속한 프레임 워크가 있습니다.

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String
}

그러나 라이브러리를 가져 오는 다른 프로젝트에서 암시 적 멤버 현명한 이니셜 라이저를 사용할 수없는 것 같습니다. 오류는 ‘CollectionTO’에 액세스 할 수있는 초기자가 없기 때문에 초기화 할 수 없습니다. 즉, 기본 암시 적 멤버에 현명한 초 기자에게 public 키워드를 제공하지 않습니다.

var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")

내 자신의 init 메소드를 다음과 같이 추가해야합니다.

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String

    public init(index: Order, title: String, description: String) {
        self.index = index;
        self.title = title;
        self.description = description;
    }

}

…하지만 다른 사람이 알고있는 다른 방법이 있다면 오히려 그렇지 않습니까?



답변

매뉴얼 인용 :

“구조 유형의 기본 멤버 별 이니셜 라이저 구조의 저장된 특성 중 하나가 개인용 인 경우 구조 유형의 기본 멤버 별 이니셜 라이저는 개인용으로 간주됩니다. 그렇지 않으면 이니셜 라이저의 내부 액세스 레벨이 있습니다.

위의 기본 이니셜 라이저와 마찬가지로 다른 모듈에서 공용 구조 유형을 멤버 단위 이니셜 라이저로 초기화 할 수있게하려면 유형 정의의 일부로 공용 멤버 단위 이니셜 라이저를 직접 제공해야합니다. “

“Swift Programming Language” , “Access Control” 섹션 에서 발췌 .


답변

최소한 기본 멤버 별 이니셜 라이저를 가질 수는 없지만 다음 단계를 통해 신속하게 만들 수 있습니다.

  1. 구조체 대신 객체를 일시적으로 클래스로 만듭니다.
  2. 저장
  3. 클래스 이름을 마우스 오른쪽 단추로 클릭하고 리 팩터-> 멤버 별 초기화 프로그램 생성을 선택하십시오.
  4. 구조체로 다시 변경하십시오.

답변

애플이 이것을 변경하고 성가 시게 만들 때까지, 당신은
https://github.com/Bouke/SwiftInitializerGenerator (또는 다른 것)를 공개 초기화 프로그램 생성에 사용할 수 있습니다. 따라서 작업이 줄어 듭니다. 그것을 시도하고 작동합니다. Xcode 버전 10.0, High Sierra 10.13.6


답변

이제 전체 신속한 데이터 모델 파일을 라인 단위로 구문 분석하고 공개 액세스 수정 자, 공개 멤버 별 기본 초기화 프로그램 및 기타 항목을 별도의 자동 생성 출력 빠른 파일에 추가하는 루비 젬이 있습니다.

이 보석을 swift_republic 이라고 합니다

이 gem을 실행하려면 다음 설명서를 확인하십시오.

https://github.com/mehul90/swift_republic


답변