2016-09-29 2 views
1

J'ai une classe partagée par iOS et OSX. Après la mise à niveau Swift 3, la ligne de code suivante:Pourquoi Swift 3 traite-t-il NSString différemment pour OSX et iOS?

let textSize = ("999" as NSString).size(withAttributes: [NSFontAttributeName:labelFont!]) 

... provoque l'erreur suivante pour une version iOS:

étiquette argument incorrect dans l'appel (ont 'withAttributes:', attendu ' les attributs:').

fixe comme suit:

let textSize = ("999" as NSString).size(attributes: [NSFontAttributeName:labelFont!]) 

Mais la construction OSX a l'erreur:

étiquette argument incorrect dans l'appel (ont 'attributs:', attendus 'withAttributes:')

Pourquoi NSString est-il traité différemment pour les versions iOS et OSX?

(Je travaille autour de cela en utilisant des extensions. Tout autre code partagé a converti avec succès à Swift 3.)

Répondre

2

NSString taille est traitée principalement différemment en raison des méthodes de mesure chaque utilisation ... (NSSize v CGSize):

OS X:

extension NSString { 

    @available(OSX 10.0, *) 
    open func size(withAttributes attrs: [String : Any]? = nil) -> NSSize 
     ... 
} 

iOS:

extension NSString { 

    @available(iOS 7.0, *) 
    open func size(attributes attrs: [String : Any]? = nil) -> CGSize 
      ... 
} 

autres que OS X en utilisant NSSize et iOS en utilisant CGSize ils ont tout à fait semblables méthodes en dehors de « taille » l'ancienne en utilisant AppKit et celui-ci en utilisant UIKit.