web-dev-qa-db-ja.com

Swift内でObjective-Cカテゴリを使用する適切な方法は何ですか?

Swiftファイルに、運がなければいくつかのカテゴリメソッドをインポートしようとしています。

ios-Bridging-Header.h:

_#import "UIColor+Hex.h"
_

IColor + Hex.h

_#import <UIKit/UIKit.h>

@interface UIColor (Hex)

+ (UIColor *)colorWithHex:(NSUInteger)hexInt;
+ (UIColor *)colorWithHexString:(NSString *)hexString;

@end
_

オートコンプリートがUIColor(hexInt: NSUInteger)およびUIColor(hexString: String)を明らかにすることを期待します

18
sevenflow

実際、あなたのカテゴリーはSwiftに次のように変換されます:

extension UIColor {

    init(hex hexInt: Int) -> UIColor

    init(hexString: String) -> UIColor

}

そのため、以下を使用する必要があります。

let color = UIColor(hex: 0xffffff) // instead of hexInt:

let color = UIColor(hexString: "ffffff")

ただし、ベータ版ソフトウェアではオートコンプリートがまだバグがある可能性があります。

33
akashivskyy

Objective-CカテゴリはSwiftで直接使用できます。これは、Stringのようないくつかのブリッジクラスにとって非常に興味深いものになります。 Objective-CのカテゴリでNSStringを拡張すると、Swift(Stringに直接!)からアクセスできます。)

これを行う方法は、Swiftプロジェクトで「ブリッジヘッダー」を作成することです。

完全な手順 ここ

それの短いです:

  1. 他のすべての#importステートメントを含む.hヘッダーファイルを(Objective-Cで)作成します。
  2. ビルド設定のObjective-C Bridging Headerにそのファイルへのパスを入れます
  3. Swiftファイルにブリッジヘッダーをインポートする必要はありません。すでにそこにあります
24
Dan Rosenstark