Как я могу применить предупреждение или ошибку компилятора для конфликтов пространства имен?

У меня есть следующее:

  • FrameworkA, который определяет класс Foo
  • FrameworkB, который также определяет класс Foo
  • Файл в FrameworkA, который импортирует FrameworkB

Как я могу заставить Xcode генерировать предупреждение или ошибку в любой строке, которая ссылается на Foo без использования определителя пространства имен?

Например:

let a = FrameworkA.Foo() // fine, no warning or error
let b = FrameworkB.Foo() // fine, no warning or error
let c = Foo()            // at a minimum, a warning

Я полностью понимаю, что если мы находимся в FrameworkA, то третий пример эквивалентен FrameworkA.Foo(), но я хотел бы, чтобы Xcode генерировал предупреждение или ошибку.

Рассмотрим сценарий, когда класс Foo существует в FrameworkB в течение длительного времени, и строка кода, о которой идет речь, всегда указывала на класс Foo, определенный в FrameworkB, но в некоторых более поздних версиях в будущем, кто-то добавил класс Foo в FrameworkA по какой-то причине. Это изменит поведение строки в файле.

Я бы хотел, чтобы Xcode генерировал предупреждения или ошибки времени компиляции в любое время, когда что-то определенное в нескольких фреймворках, импортированных в файл, используется без явного объявления пространства имен.

Есть ли способ?

Ответы

Ответ 1

Я не думаю, что в этот момент Xcode поддерживает это, к сожалению, - несколько менее плодотворных решений:

  • Откройте радарную задачу и надейтесь, что Apple ее исправит.
  • Префикс ваших классов (как мы привыкли делать с Obj-C)

Второй вариант должен быть жизнеспособным для большинства проектов; вместо Foo и Foo у вас будет LIBAFoo, LIBBFoo, но на практике с более значимыми префиксами, т.е. CA C ore A nimation.