Как я могу получить комплект для своего кода фреймворка?

Есть ли способ узнать, какой пакет соответствует файлу исходного кода?

Я пытаюсь выполнить следующее:

У меня есть файл source.swift/source.m внутри Framework X. Этот файл имеет функцию, например: если бы он был в Swift -> whoIsMyEnclosingBundle() -> NSBundle.

Что мне нужно для правильной работы этой функции, так это возможность загрузки, например, моих раскадровок внутри этой структуры.

Я хотел бы сделать эту функцию общей, поэтому НЕТ жесткого кодирования имени пакета


person Hugo Alonso    schedule 11.03.2016    source источник


Ответы (2)


Я думаю, вы ищете +[NSBundle bundleForClass:].

Если вы не находитесь внутри класса, вы можете использовать +bundleWithIdentifier: (это означает, что вам нужно знать идентификатор заранее). Документация рекомендует этот метод для фреймворков, которым нужен собственный пакет.

person jscs    schedule 11.03.2016
comment
В Swift 2.1 будет NSBundle(forClass: self.dynamicType) - person Hugo Alonso; 14.03.2016

В Swift

Есть несколько способов:

Первый вариант будет работать каждый раз:

  • let bundle = NSBundle(forClass: [the class you are in].self)

Следующие два будут работать только в некоторых случаях:

- для функций, не отмеченных как class

let bundle = NSBundle(forClass: self.dynamicType)

- для классов, объединенных с Objective-C

let bundle = NSBundle(forClass: [the class you are in].classForCoder())

Для отличного объяснения self.dynamicType и self перейдите в этот ответ:

person Hugo Alonso    schedule 17.03.2016