2017-01-03 2 views

답변

1

글쎄 나는 이것을 overthinking 확신 ... 나는 자러해야합니다.

struct Struct { 
    let i: Int 

    init?(i: Int?) { 
     if let i = i { self.i = i } 
     else { return nil } 
    } 
} 
3

은 내가 말한 것 :

struct Struct { 
    let i: Int 

    init?(i: Int?) { 
     if i == nil {return nil} 
     self.i = i! 
    } 
} 

내가 그 일찍 종료하는 최초의 욕망을 캡처없이 중간 변수와 함께, 당신은 피하려고 한 if/else을 피할 생각합니다. i을 풀려면 그냥 풀어 라! if let 또는 guard let 또는 그 멋진 것들이 필요하지 않습니다.

는 (다른 한편으로는, 내가 물어 봐야 : 이니셜 라이저에 nil 전달이 실패로 간주되는 경우, 왜 제안은 처음에 선택 사양을 적용)

+0

실제 응용 프로그램보다 더 복잡하다, 사실 선택 변수가 초기화 도구로만 분리되도록 결국 래핑 할 필요가있는 선택적 로컬 var입니다. – Alexander

+0

나는 그런 경우가 있다고 생각했습니다. :) – matt

+0

사실, 내가 여기있는 동안, 나는 내 디자인이 완전히 쓰레기가 아닌지 확인하기 위해 잘 조사 할 것이다. 나는 [RIFF 파일] (http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html)에서 데이터의 "덩어리"세트를 파싱하려고 시도하고있다. (컨테이너 포맷은' wav','ani' 사용). 유효한 파일에는 특정 청크 세트가 있어야하지만 임의의 순서로 올 수 있습니다. 따라서 변수는 생성시에는 선택 사항이지만 궁극적으로 검사해야하며 새롭게 초기화 된 구조체의 비 선택적 속성에 할당되어야합니다. – Alexander