2015-06-29 12 views
6

Ho un typedef come così:Utilizzando obj-c typedef a Swift

typedef NSString VMVideoCategoryType; 

extern VMVideoCategoryType *const VMVideoCategoryType_MusicVideo; 
extern VMVideoCategoryType *const VMVideoCategoryType_Audio; 
extern VMVideoCategoryType *const VMVideoCategoryType_Performance; 
extern VMVideoCategoryType *const VMVideoCategoryType_Lyric; 
extern VMVideoCategoryType *const VMVideoCategoryType_Show; 

ho incluso questo file nell'intestazione colmare. Tuttavia, quando provo ad accedere VMVideoCategoryType in un file di Swift ottengo un errore:

Use of undeclared type 'VMVideoCategoryType'

Esiste un modo per fare questo lavoro o devo completamente ri-definire questo tipo a Swift?

risposta

9

io sono un po 'speculando, ma il motivo sembra essere che Objective-C oggetti come NSString non possono essere assegnati in modo statico (si veda ad esempio Are objects in Objective-C ever created on the stack?). Se

typedef NSString VMVideoCategoryType; 

sono stati importati in Swift allora si potrebbe dichiarare una variabile locale

var foo : VMVideoCategoryType 

che sarebbe un NSString e non un puntatore a NSString.

Nota anche che quello che vedi in Swift come NSString corrisponde a NSString * in Objective-C.

Se si definisce VMVideoCategoryType come un typedef per NSString * allora è visibile a Swift:

typedef NSString * VMVideoCategoryType; 

extern VMVideoCategoryType const VMVideoCategoryType_MusicVideo; 
// ... 
+0

Questo funziona per sbarazzarsi di errori Swift, ma poi le mie dichiarazioni di tipo precedenti in Obj-C utilizzando quel tipo errori di lancio: 'La conversione implicita di un puntatore indiretto a un puntatore Objective-C a 'NSString *' non è consentita con ARC' – Ramsel

+0

@Ramsel: è necessario sostituire' VMVideoCategoryType * 'di' VMVideoCategoryType' dopo tale modifica (come ho fatto in le definizioni esterne). –

+0

@Ramsel: se ciò non aiuta, aggiungi il codice Objective-C che causa il problema alla tua domanda. –

Problemi correlati