2014-12-08 12 views
13

È possibile definire una funzione di classe in un'estensione in rapido, proprio come in una categoria di obiettivo-C è possibile definire anche le funzioni di classe?Funzione di classe in estensione rapida (categoria)

Esempio in Objective-C

@implementation UIColor (Additions) 

+ (UIColor)colorWithHexString:(NSString *)hexString 
{ 
    // create color from string 
    // ... some code 
    return newColor; 
} 

@end 

quale sarebbe l'equivalente in rapida?

+0

Non useremo sempre le funzioni come funzioni di classe, purché non usiamo variabili di istanza/proprietà calcolate? – brainray

+0

Vedere [questa risposta SO] (http://stackoverflow.com/a/31026358/3681880) per una descrizione di come creare estensioni Swift. – Suragch

risposta

22

Sì, è possibile e molto simile, la differenza principale è che le estensioni Swift non hanno un nome.

extension UIColor { 
    class func colorWithHexString(hexString: String) -> UIColor { 
     // create color from string 
     // ... some code 
     return newColor 
    } 
} 
+4

Un inizializzatore personalizzato potrebbe essere la soluzione più swiftier, poiché è a questo che sono associati i metodi factory Objectice-C. –

+1

Questo è quello che farò ora. Grazie per il suggerimento. –

5

Per la cronaca. Ecco il codice per la soluzione di cui sopra:

import UIKit 

extension UIColor { 
    convenience init(hexString:String) { 

     // some code to parse the hex string 
     let red = 0.0 
     let green = 0.0 
     let blue = 0.0 
     let alpha = 1.0 

     self.init(red:red, green:green, blue:blue, alpha:alpha) 
    } 
} 

Ora posso usare:

rapida:

let clr:UIColor = UIColor(hexString:"000000") 

e teoricamente dovrei essere in grado di utilizzare in Objective-C:

UIColor *clr = [UIColor colorWithHexString:@"000000"]; 
+1

Inoltre una nota che è possibile rendere 'init' fail -able quando viene fornito' hexString' non valido. – Kirsteins

Problemi correlati