2014-06-25 13 views
23

Secondo l'ingegnere di Apple Elizabeth Reid "spessori" è quando si utilizza la compilazione condizionale di riutilizzare codice tra iOS e OS X. Per esempio:Shimming a Swift

#if TARGET_OS_IPHONE 
@import UIKit; 
#define BaseView UIView 
#else 
@import AppKit; 
#define BaseView NSView 
#endif 

@interface MyView : BaseView 

@end 

Nel WWDC 2014 sessione di Sharing code between iOS and OS X lei afferma anche:

Se si traduce letteralmente come si sprema con Objective-C, questo non verrà compilato in Swift.

Ci sono modi per applicare il codice a Swift.

Ma diventa più complicato della tua compilation condizionale di base che possiamo usare in Objective-C.

Quindi, quali sono i modi per "applicare il codice" in Swift?

+0

un'occhiata a questo: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/ InteractingWithCAPIs.html, in particolare _ istruzioni di compilazione condizionale_. potrebbe essere la risposta alla tua domanda. – holex

+1

@holex Dallo stesso documento: "Al contrario delle istruzioni di compilazione delle condizioni nel preprocessore C, le istruzioni di compilazione condizionale in Swift devono circondare completamente blocchi di codice che sono autonomi e sintatticamente validi." In una rilettura, penso che sia quello che Reid avrebbe potuto significare con "più complicato". – hpique

risposta

31

che sarebbe simile a questa in Swift:

#if os(iOS) 
    import UIKit 
    typealias BaseClass = UIView 
    #else 
    import AppKit 
    typealias BaseClass = NSView 
#endif 

// 

class MyClass : BaseClass { 

    // ... 

} 
+0

Neat. Non ho pensato a 'typealias'. Non riesco a farlo funzionare su un parco giochi, ma proverò più tardi in un progetto. – hpique

+0

Non ho mai usato il parco giochi, ma in un progetto il _Xcode6 beta2_ può già occuparsene correttamente dalla mia parte. – holex