-
-
Save jeremy-w/e9c2797a32e0522a46c25707ab7653b1 to your computer and use it in GitHub Desktop.
Example bridging header generated by a simple Swift file. Tons of definition cruft up top; the heart of it is a few lines at the end.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Generated by Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) | |
#pragma clang diagnostic push | |
#if defined(__has_include) && __has_include(<swift/objc-prologue.h>) | |
# include <swift/objc-prologue.h> | |
#endif | |
#pragma clang diagnostic ignored "-Wauto-import" | |
#include <objc/NSObject.h> | |
#include <stdint.h> | |
#include <stddef.h> | |
#include <stdbool.h> | |
#if !defined(SWIFT_TYPEDEFS) | |
# define SWIFT_TYPEDEFS 1 | |
# if defined(__has_include) && __has_include(<uchar.h>) | |
# include <uchar.h> | |
# elif !defined(__cplusplus) || __cplusplus < 201103L | |
typedef uint_least16_t char16_t; | |
typedef uint_least32_t char32_t; | |
# endif | |
typedef float swift_float2 __attribute__((__ext_vector_type__(2))); | |
typedef float swift_float3 __attribute__((__ext_vector_type__(3))); | |
typedef float swift_float4 __attribute__((__ext_vector_type__(4))); | |
typedef double swift_double2 __attribute__((__ext_vector_type__(2))); | |
typedef double swift_double3 __attribute__((__ext_vector_type__(3))); | |
typedef double swift_double4 __attribute__((__ext_vector_type__(4))); | |
typedef int swift_int2 __attribute__((__ext_vector_type__(2))); | |
typedef int swift_int3 __attribute__((__ext_vector_type__(3))); | |
typedef int swift_int4 __attribute__((__ext_vector_type__(4))); | |
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); | |
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); | |
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); | |
#endif | |
#if !defined(SWIFT_PASTE) | |
# define SWIFT_PASTE_HELPER(x, y) x##y | |
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) | |
#endif | |
#if !defined(SWIFT_METATYPE) | |
# define SWIFT_METATYPE(X) Class | |
#endif | |
#if !defined(SWIFT_CLASS_PROPERTY) | |
# if __has_feature(objc_class_property) | |
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ | |
# else | |
# define SWIFT_CLASS_PROPERTY(...) | |
# endif | |
#endif | |
#if defined(__has_attribute) && __has_attribute(objc_runtime_name) | |
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) | |
#else | |
# define SWIFT_RUNTIME_NAME(X) | |
#endif | |
#if defined(__has_attribute) && __has_attribute(swift_name) | |
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) | |
#else | |
# define SWIFT_COMPILE_NAME(X) | |
#endif | |
#if defined(__has_attribute) && __has_attribute(objc_method_family) | |
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) | |
#else | |
# define SWIFT_METHOD_FAMILY(X) | |
#endif | |
#if defined(__has_attribute) && __has_attribute(noescape) | |
# define SWIFT_NOESCAPE __attribute__((noescape)) | |
#else | |
# define SWIFT_NOESCAPE | |
#endif | |
#if !defined(SWIFT_CLASS_EXTRA) | |
# define SWIFT_CLASS_EXTRA | |
#endif | |
#if !defined(SWIFT_PROTOCOL_EXTRA) | |
# define SWIFT_PROTOCOL_EXTRA | |
#endif | |
#if !defined(SWIFT_ENUM_EXTRA) | |
# define SWIFT_ENUM_EXTRA | |
#endif | |
#if !defined(SWIFT_CLASS) | |
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) | |
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA | |
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA | |
# else | |
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA | |
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA | |
# endif | |
#endif | |
#if !defined(SWIFT_PROTOCOL) | |
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA | |
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA | |
#endif | |
#if !defined(SWIFT_EXTENSION) | |
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) | |
#endif | |
#if !defined(OBJC_DESIGNATED_INITIALIZER) | |
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer) | |
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) | |
# else | |
# define OBJC_DESIGNATED_INITIALIZER | |
# endif | |
#endif | |
#if !defined(SWIFT_ENUM) | |
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_EXTRA _name : _type | |
# if defined(__has_feature) && __has_feature(generalized_swift_name) | |
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_EXTRA _name : _type | |
# else | |
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name) | |
# endif | |
#endif | |
#if !defined(SWIFT_UNAVAILABLE) | |
# define SWIFT_UNAVAILABLE __attribute__((unavailable)) | |
#endif | |
#if defined(__has_feature) && __has_feature(modules) | |
@import ObjectiveC; | |
#endif | |
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" | |
#pragma clang diagnostic ignored "-Wduplicate-method-arg" | |
SWIFT_CLASS("_TtC9Bridgette14CallMeFromObjC") | |
@interface CallMeFromObjC : NSObject | |
@property (nonatomic, copy) NSString * _Nonnull name; | |
- (nonnull instancetype)initWithName:(NSString * _Nonnull)name OBJC_DESIGNATED_INITIALIZER; | |
- (void)speak; | |
- (nonnull instancetype)init SWIFT_UNAVAILABLE; | |
@end | |
#pragma clang diagnostic pop |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// You have to import Foundation to be able to @objc anything. | |
import Foundation | |
// And a class has to inherit from NSObject to be visible to Obj-C. | |
// (If you wanna write a root class, you'll have to do it in Obj-C.) | |
public class CallMeFromObjC: NSObject { | |
// Publish the API you want to use from Obj-C. | |
public var name: String | |
public init(name: String) { | |
self.name = name | |
} | |
public func speak() { | |
print("\(self)'s name is: \(name)") | |
} | |
} | |
// To compile, run: | |
// | |
// install -d build | |
// xcrun -sdk macosx10.12 swift -frontend -c -primary-file CallMeFromObjC.swift -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/ -module-name Bridgette -emit-module-path build/Bridgette.swiftmodule -emit-objc-header-path build/CallMeFromObjC.h -enable-testing -enable-objc-interop -parse-as-library -o build/CallMeFromObjC.o |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment