2014-11-05 7 views
5

ho questo protocollo in una classe Objective C:Implementare Obiettivo del protocollo C a Swift

@protocol YTManagerDelegate <NSObject> 
@required 
- (void)uploadProgressPercentage:(int)percentage; 
@end 
... 

e una classe veloce ad esso collegato:

class YTShare: UIViewController, YTManagerDelegate{ 

    func uploadProgressPercentage(percentage:Int?){ 
     println(percentage) 
    } 
    ... 

ricevo l'errore: tipo YTShare fa non conforme al protocollo YTShareDelegate, probabilmente ho scritto in modo errato la funzione swift in modo che la classe obj non la trovi. Come posso scrivere correttamente?

risposta

5

Ci sono due errori nel metodo delegato

func uploadProgressPercentage(percentage:Int?){ 
    println(percentage) 
} 

Il parametro non deve essere un optional, e il tipo C int viene mappato Swift come CInt (un alias per Int32):

func uploadProgressPercentage(percentage:CInt){ 
    println(percentage) 
} 

In alternativa, è possibile utilizzare NSInteger nel protocollo Objective-C, che è mappato a Int in Swift. Questo sarebbe un numero intero a 32 o 64 bit, a seconda dell'architettura , mentre int/CInt è sempre a 32 bit.