2014-10-25 1 views
0

스위프트 캡처 지정자에 대한 유형 요구 사항 및 선언 제한 사항에 대해 혼동 스럽습니다. 설명서에 따르면 weak 참조는 var이고 "선택적 유형"이어야하며 unowned 참조는 선택형이 아니어야합니다. 그러나 Apple의 자체 API 참조 has examplesunowned(unsafe)의 참조가 선택 사항으로 선언되는 반면 Xcode 인터페이스 빌더는 weak 콘센트와 암시 적으로 래핑되지 않은 작업을 생성합니다 (언어 참조에서 항상 "선택 유형"인 것은 아닙니다).스위프트 캡처 지정자에 대한 유형 및 선언 제한

각 Swift 캡처 지정자에는 어떤 유형이 필요합니까? var이어야하며 let 일 수 있습니까?


FWIW, 내가 생각하는 그

  • weakType? 또는 Type! 있지만 Type 수있다; 및 var
  • unowned(safe) (same as unowned)은 Type이어야합니다. 그리고 수 있습니다
  • unowned(unsafe)Type? 또는 Type! 일 수 있습니다; 그리고 let

일지 모르지만 나는 분명하지 않습니다.

답변

0

처음으로 코코아 or Cocoa touch APIs are imported in swift from objective-c`. 최상의 방법으로 신속하게 매핑됩니다. 둘 다 상호 운용이 가능합니다.

이러한 unowned(unsafe) 속성은 ObjC에서 assign으로 표시됩니다. 이들은 unsafe이고 ARC는 개체를 보유하지 않으며 참조가 재설정되도록합니다. nil if the object is deallocated. These are old apple API and not changed with ARC and remain asbut you should make 대리자 약한 신속한 모범 사례에 대한 헤더를 찾지 않아도 신속하게 만드는 많은 트릭을 만들었습니다. 그리고 objective-c는 상호 운용성이 있으며, 만약 당신이 헤더보다 어떤 안전성을 느낀다면 당신은 느낄 수 있습니다.

당신은 객체 할당을 취소받을 경우 자동으로 nil를 포함하고 다른 포인터를 유지하지 않기 때문에

약한optional을해야 옳다

소유되지 않은 (안전)optional 안 및 재설정되지 않습니다 nil 개체가 거래 된 경우

무소속 (안전하지 않은) 할 수 있거나 할 수 없음 t는 optional이어야합니다. 객체 거래 위치에 대한 ARC의 안전성을 제공하지 않으며 nil으로 재설정하지 마십시오. 신속한 프로그램에서 사용하면 안됩니다. 필요한 경우 unowned을 사용하십시오. 이것은 상호 운용성을위한 것입니다. 이 객체가 할당 해제 할 때 변경 및 nil로 설정 될 수 있기 때문에

약한 항상 var입니다.그들이 당신에 의존하고 런타임이 변수를 변경하지 않으므로

소유되지 않은 (안전)이 소유되지 않은 (안전하지 않은) 모두 var 또는 let 될 수 있습니다.

참고 : 당신은 선언 할 수 소유자가없는 (안전하지 않은)이 될 수있는이 때문에 assign 또는 unretain 속성으로 만든 신속 program.Its 단지 상호 운용성 및 swift.They에 사용하지 않아야에서 optionalnil

+0

이것이 어떻게 질문 (또는 내 추측 답변)에 매핑되는지는 명확하지 않습니다. 집중할 수 있습니까? – orome

+0

@raxacoricofallapatorius 어느 부분에 설명이 필요한지 알려 주시기 바랍니다. – codester

+0

감사합니다. 훨씬 좋습니다. 조금 더 응축 할 수 있다면 (예 : 내 FWIW의 구조를 따르십시오. 훨씬 더 명확하게 같은 것을 말합니다). – orome