[NSBundle bundleForClass : [self class]]와 동일한 스위프트


131

다음 코드와 동일한 기능은 무엇입니까?

[NSBundle bundleForClass:[self class]]

테스트 번들 (JSON 데이터)에서로드 자원이 필요합니다.

답변:


222

사용한 적이 없지만 다음과 같아야합니다.

스위프트 <= 2.x

NSBundle(forClass: self.dynamicType)

스위프트 3.x

Bundle(for: type(of: self))

39
현재 버전의 Xcode에서 자동 완성 기능은 사용자가 무슨 말을하는지 전혀 모르는 것처럼 작동하지만 실제로 작동합니다.
David Beck

4
버전 2.1 : NSBundle (forClass : self)
zwebie

이것을 바꾸는 것을 고려하는 진화론 스레드는 github.com/apple/swift-evolution/blob/master/proposals/에 있습니다.
William Entriken

1
솔루션은 값 유형에 적합하지 않습니다. init?(identifier: String)identifier가 대상의 번들 ID 인 where를 사용 하십시오. 값 유형에 대한 또 다른 솔루션은 값 유형 내에 빈 클래스를 선언하는 것입니다. 후자 솔루션의 예 : Bundle(for: Foo.Bar.self)어디 Foo- 당신의 구조체, Bar- 일부 내부 클래스.
Vadim Bulavin

1
Swift 3.1에서는 작동하지 않습니다. type(of: self)반환 ClassName.Type및 호출 Bundle(for:)그에게 돌아갑니다 주요 번들
아디 브

38

스위프트 3 :

Bundle(for: type(of: self))

3
솔루션은 값 유형에 적합하지 않습니다. init?(identifier: String)identifier가 대상의 번들 ID 인 where를 사용 하십시오. 당신은 번들 ID, 사용 하드 코드하지 않으려면 당신의 구조체, - - 일부 내부 클래스를. Bundle(for: Foo.Bar.self)FooBar
Vadim Bulavin

12

나는 개인적으로 좋아한다 :

let bun = NSBundle(forClass: self.classForCoder)



7

선택한 답변이 UIView 하위 클래스의 정적 메소드에서 작동하지 않지만 다음을 발견했습니다.

Bundle(for: self.classForCoder)

Bundle테스트 대상 내 에서 가져 오려는 경우에도 작동합니다 .


6

수업을하고 있다면

Bundle(for: type(of: self))

때로는 구조체에서 작업 할 수 있으며 번들의 모든 클래스를 사용해야합니다

Bundle(for: AnyClassInTheBundle.self)

4

클래스의 dynamicType에 대한 xib로드

    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "CellForAlert", bundle: bundle)
    let view =  nib.instantiateWithOwner(self, options: nil).first as! UIView
    view.frame = bounds
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    self.addSubview(view);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.