2015-04-26 5 views
14

Considerate Ho il seguente:Come posso applicare un avvertimento o un errore del compilatore per i conflitti nello spazio dei nomi?

  • FrameworkA, che definisce classe Foo
  • FrameworkB, che definisce anche classe Foo
  • Un file in FrameworkA che importa FrameworkB

Come posso ottenere Xcode per generare un avviso o un errore su qualsiasi linea che faccia riferimento a Foo senza usare il qualificatore namespace?

Ad esempio:

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 

Capisco perfettamente che se siamo in FrameworkA, poi il terzo esempio è equivalente a FrameworkA.Foo(), ma vorrei per Xcode per generare un avviso o errore.

Si consideri lo scenario quando la classe Foo è esistita in FrameworkB per lungo tempo, e la linea di codice in questione ha sempre inteso puntare alla classe Foo definita nel FrameworkB, ma ad un certo punto più avanti nel futuro, qualcuno ha aggiunto classe Foo in FrameworkA per qualche motivo. Questo cambierebbe il comportamento della linea nel file.

Vorrei che Xcode generasse avvisi o errori in fase di compilazione ogni volta che viene utilizzato qualcosa definito in più quadri importati in un file senza che lo spazio dei nomi sia esplicitamente dichiarato.

C'è un modo?

risposta

2

Non credo che a questo punto Xcode supporta questa purtroppo - alcune soluzioni meno feconde:

  • Aprire un radar task, e la speranza che Apple lo fissa.
  • Prefix vostre classi (come siamo abituati a fare con Obj-C)

La seconda opzione dovrebbe essere praticabile per la maggior parte dei progetti; invece di Foo e Foo, avrete LIBAFoo, LIBBFoo, ma in pratica, con i prefissi più significative vale a dire CAC minerale Un nimation.

+0

Questo tipo di mosche si trova direttamente di fronte a tutti i post intorno a Stack Overflow, suggerendo che non è necessario aggiungere il prefisso alle classi perché abbiamo spazi dei nomi. – nhgrif

+0

Per essere onesti, ho utilizzato entrambi gli approcci nei miei progetti Swift, e fino ad ora, sono ancora un fan dell'uso dei prefissi; ti dà un ulteriore suggerimento mentale su dove il codice appartiene e ti aiuta insieme all'estrazione e al disaccoppiamento del codice. Detto questo, Xcode dovrebbe sicuramente avere qualche avvertimento qui; Ricordo che, se lo fai in Java, il compilatore si lamenterebbe di uno spazio dei nomi ambiguo. – Zorayr