[SWIFT] Transition Objc -> Swift

Hello a tous,

Je fais sur macOS un projet en Swift, le passage objC -> Swift se passe plus plutôt bien.

Car contre il y a deux trois trucs qui me gonflent

Exemple:

Utilisation de la classe NSImage ObjC:

``
NSImage *img = [NSImage imageNamed:@mypic];

``

Idem en Swift

``
let img = NSImage.init(named:NSImage.Name(rawValue:"mypic")

``
C'est vraiment pas terrible comme code!

Est t'il possible de créer une extension de classe pour

avoir une syntaxe du type :

``
let img = NSImage.init(named:"mypic")

``

Réponses

  • Le plus simple et une extension de NSImage.Name :

    extension NSImage.Name {
        static let myPic: NSImage.Name = .init("myPic")
    }
    

    Ensuite tu peux sans soucis écrire ce code :

    let img = NSImage(named: .myPic)
    
  • @Pyroh a dit :
    Le plus simple et une extension de NSImage.Name :

    extension NSImage.Name {
        static let myPic: NSImage.Name = .init("myPic")
    }
    

    Ensuite tu peux sans soucis écrire ce code :

    let img = NSImage(named: .myPic)
    

    Merci pour ta réponse, mon projet n'a pas beaucoup d'images çà va le faire!

  • Sinon il y aussi cela

    let imgname:NSString = "mypic"

    let mypic = NSImage.init(named:imgname as NSImage.Name)

  • @devulder a dit :
    Sinon il y aussi cela

    let imgname:NSString = "mypic"

    let mypic = NSImage.init(named:imgname as NSImage.Name)

    Ouais mais non faut pas faire ce genre de trucs. Vraiment.

  • CéroceCéroce Membre, Modérateur

    Ceci ne fonctionne pas ?

    let image = NSImage(named: NSImage.Name("mypic"))
    
  • Joanna CarterJoanna Carter Membre, Modérateur

    C'est mieux de suivre les conseils officiels d'Apple en déclarant l'extension à NSImage.Name comme dit Pyroh

  • @Céroce a dit :
    Ceci ne fonctionne pas ?

    let image = NSImage(named: NSImage.Name("mypic"))
    

    Si, mais bon au départ on a sur objC une syntaxe hyper simple et on passe à un code moins lisible du Swift

    a mon avis.

  • @Pyroh a dit :

    @devulder a dit :
    Sinon il y aussi cela

    let imgname:NSString = "mypic"

    let mypic = NSImage.init(named:imgname as NSImage.Name)

    Ouais mais non faut pas faire ce genre de trucs. Vraiment.

    Ok, c'est noté :)

  • CéroceCéroce Membre, Modérateur

    Si, mais bon au départ on a sur objC une syntaxe hyper simple et on passe à un code moins lisible du Swift

    Certes, mais ça a quand même un intérêt, parce que les noms des images intégrées AppKit sont enfin renseignés de manière exhaustive. On sent surtout le poids des années… Swift fait avec, tant bien que mal.

Connectez-vous ou Inscrivez-vous pour répondre.