2014-06-25 16 views
23

Laut Apple-Ingenieur Elizabeth Reid "Shim" Shimmen ist, wenn Sie die bedingte Kompilierung verwenden, um Code zwischen iOS und OS X. Zum Beispiel wiederzuverwenden:in Swift

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

@interface MyView : BaseView 

@end 

In der WWDC 2014 Sitzung Sharing code between iOS and OS X sie sagt auch:

Wenn Sie wörtlich übersetzen, wie Sie mit Objective-C Shim würden, wird diese nicht in Swift kompilieren.

Es gibt Möglichkeiten, Ihren Code in Swift zu spiegeln.

Aber es wird komplizierter als Ihre grundlegende bedingte Kompilierung , die wir in Objective-C verwenden können.

Also, welche Möglichkeiten gibt es, um Ihren Code in Swift zu "shim"?

+0

auf dieser einen Blick: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/ InteractingWithCAPIs.html, insbesondere die _complementary compilation statements_. Das könnte eine Antwort auf Ihre Frage sein. – holex

+1

@holex Aus demselben Dokument: "Im Gegensatz zu den Bedingungen-Kompilierungsanweisungen im C-Präprozessor müssen bedingte Kompilierungsanweisungen in Swift vollständig eigenständige und syntaktisch gültige Code-Blöcke umgeben." Bei einem erneuten Lesen denke ich, dass Reid es mit "komplizierter" gemeint haben könnte. – hpique

Antwort

31

, die wie folgt in Swift aussehen:

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

// 

class MyClass : BaseClass { 

    // ... 

} 
+0

Ordentlich. Ich habe nicht an Typalien gedacht. Kann es nicht auf einem Spielplatz arbeiten, wird es aber später in einem Projekt versuchen. – hpique

+0

Ich habe den Spielplatz nie benutzt, aber in einem Projekt kann der _Xcode6 beta2_ schon richtig auf meiner Seite damit umgehen. – holex