2014-09-30 3 views
16

Xcode에서 생성 한 CoreData 모델 용 NSManagedObject 클래스가 있습니다.Swift 클래스의 확장이 정의 파일 외부에서 보이지 않는 이유는 무엇입니까?

@objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ } 

'SomeClass.swift'파일에 정의되어 있습니다. 이 클래스를 확장하여 'SomeClassExtension.swift'를 만들었습니다. 다음과 같이 확장을 정의합니다.

extension SomeClass { 
    class func typeMethod1() {} 
    func instanceMethod2() {} 
} 

이러한 확장 메서드는이 정의 파일 내에서 사용할 수 있지만 외부에서 볼 수는 없습니다. 이 문제의 원인은 무엇입니까?

답변

33

새 파일 (SomeClassExtension.swift)이 올바른 대상에 포함되지 않은 것처럼 들립니다. Xcode에서 파일을 선택한 다음 "파일 검사기"(보기 메뉴> 유틸리티> 파일 검사기 표시)를 열어 파일의 대상 구성원을 다시 확인하십시오. 대상 구성원 제목 아래에서 올바른 대상이 선택되었는지 확인하십시오.

+2

타겟의 선택을 취소하고 다시 확인했습니다. 그것을 위해 그것을 고정. – Sam

+0

아무 도움도 여기 – brainray

+0

아무도 그 문제가 뭔지 알아 냈어? –

0

해당 메소드에 public 수정자를 볼 수 없습니다.

+1

Swift의 모든 것은 기본적으로 "내부"이므로 한 파일의 선언은 동일한 빌드 대상의 일부인 한 다른 파일의 코드에서 볼 수 있어야합니다. –

+0

사실 그것은 공정한 점입니다. 모든 것이 같은 표적에 있다면 그것은 그렇습니다. –

+0

@NateCook 안녕하세요, Nate. 따라서 .m 파일에만 물건을 넣음으로써 Objective-C에서 할 수있는 것처럼 Swift에서 정의와 구현 세부 사항 ('var's 광고 방법 모두)을 숨기는 방법이 있습니까? 감사. – Unheilig