問題
UIColorが定義されたdefineをbridging-headerでimportしたのに、
いざSwiftでその定数を使おうとすると、ビルドエラーになる。
Use of unresolved identifier
Swiftで #define (マクロ)を使う - Qiita
Objective-Cでは使えていた #define がSwiftになって使えなくなったように見えるのですが、Swiftベースのプロジェクトでも使うことは可能なようです。Xcodeでプロジェクトを…
やっていることはこれと一緒↑
原因
Swiftからは、簡単なマクロ(範囲があいまい…)しか呼べない
- 数字系 ◯
- UIColor ×
文字列も普通に定義"String"
しただけなら使えるらしい?から、
C言語で使える定数はSwiftからも使えるけど、
NSObjectの定数は使えない、のかな…?(推測)
解決策
仕方がないので、マクロの値を返すだけのラッパークラスを作成して、
Swiftから使う時はそれを呼び出すようにした。
例
(全部メモ帳上で書いたので、間違いがあったら教えてください)
myProject-bridging-header.h
#import "wrapper.h"
define.h
#define MYCOLOR [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0];
wrapper.h
#import <Foundation/Foundation.h>
#import "define.h"
@interface Wrapper : NSObject
+ (UIColor*) myColor();
@end
wrapper.m
#import "wrapper.h"
@interface Wrapper
+ (UIColor*) myColor() { return MYCOLOR; }
@end
呼び出す時は以下のようにして呼び出せばOK
main.swift
Wapper.myColor()
参考
From Objective-C to Swift: Use Complex #define Macros in Swift
Swift is a (not so) new programing language announced by Apple on June 2014 during WWDC of the same year. The announcement was exciting and…
コメント