2017-03-11 1 views
1

J'ai un OC UIViewController catégorie, qui decleared une méthode de classe de UIViewControllerComment remplacer une méthode de catégorie oc dans .swift

+(BOOL)hasStoryBoard; 

Et j'importer également cette catégorie dans xxx-Bridging-Header.h fichier

Ma classe rapide CustomVC est hérité UIViewController. Je souhaite remplacer +(BOOL)hasStoryBoard pour donner une valeur de type BOOL. Cette méthode sera appelée dans une autre classe pour déterminer la fonction de la nouvelle instance de CustomVC.

Mais dans ma méthode CustomVC.swift je ne trouve pas comme ceci:

override class func hasStoryBoard()->bool{}

Je dois remplacer cette méthode pour donner un YES, ou donner une sous-classe est NO, ainsi de suite ...

J'ai cherché ce site et je l'ai trouvé Swift: How to call a category or class method from Objective-C. Dans cette discussion, expliqué et vous dire comment appeler la méthode, pas comment remplacer la méthode.

Pouvez-vous trouver une solution à surcharger la méthode de classe de catégorie oc? Ou donnez une solution de contournement dans mon cas.

Tout mon code est:

@interface UIViewController (StoryBoard) 
+(BOOL)hasStoryBoard; 
-(void)haha; 
@end 

.

@implementation UIViewController (StoryBoard) 

static BOOL hasStoryboard = NO;//默认没有 
+(BOOL)hasStoryBoard{ 
    return hasStoryboard; 
} 
-(void)haha{} 
@end 

.

class CustomVC: UIViewController { 
    //this override is correct,have syntax input prompt 

    override func haha() { 

    } 
    //this override is incorrect ,no syntax input prompt 

    override func hasStoryBoard()->Bool{ 
     return true 
    } 

} 
+0

Avez-vous importé l'en-tête de catégorie dans l'en-tête de pontage? – deadbeef

+0

@deadbeef Je l'ai fait, et je teste la méthode d'instance de la catégorie OC peut être trouvée dans le fichier .swift, mais la méthode de la classe OC ne peut pas être trouvée dans le fichier .swift.Ceci doit être mentionné dans le lien ci-dessus, mais la question est: ? –

+0

Quelle erreur obtenez-vous si vous implémentez le remplacement de toute façon? 'override class func hasStoryBoard() -> Bool {return vrai}' – deadbeef

Répondre

0
+(BOOL)hasStoryBoard; 

définit une méthode de classe en Objective-C, mais dans votre sous-classe Swift vous définissez un exemple méthode:

override func hasStoryBoard()->Bool{ 
    return true 
} 

Ce doit être une méthode de classe aussi bien :

override class func hasStoryBoard()->Bool{ 
    return true 
} 

Astuce: Si vous ouvrez le fichier Interface Objective-C (.h) dans Xcode et sélectionner "Navigate-> Aller à l'interface générée" dans le menu Xcode vous verrez comment excacly l'objectif -C L'interface est importée au Swift. Dans votre cas:

extension UIViewController { 
    open class func hasStoryBoard() -> Bool 
    open func haha() 
} 

vous pouvez maintenant copier la définition de la fonction et l'utiliser pour définir la méthode redéfinie dans votre sous-classe.