2016-03-29 4 views
2

私は迅速で領収書の検証コードを書いているが、私はPKCS7_type_is_signedマクロに問題があります。未解決の識別子の 使用「をPKCS7_type_is_signed」使用は「PKCS7_type_is_signed」

それを使用する方法がありますSwiftではこのマクロのObjective-Cラッパーを作成する以外は何もしていませんか?

ラッパーは次のようになります。

#import "OpenSSLWrapper.h" 

#import "openssl/pkcs7.h" 
#import "openssl/objects.h" 

@implementation OpenSSLWrapper 

+ (BOOL)PKCS7TypeIsSigned:(PKCS7*)bio{ 
    return PKCS7_type_is_signed(bio); 
} 

@end 
+0

ラッパーを書いてみませんか? – nhgrif

答えて

1

ココアとObjective-Cでスウィフトを使用したりんご から

複雑なマクロはCとObjective-Cで使用されているが、スウィフトに何の対応 を持っていません。複雑なマクロは、定数を定義しないマクロで、かっこや関数に似たマクロを含む です。タイプチェックの制約を避けるため、または大量の定型コードを再入力することを避けるために、CおよびObjective-Cでは複雑なマクロ を使用します。ただし、マクロを使用すると、デバッグやリファクタリングが難しくなることがあります。 Swiftでは、関数 とジェネリックスを使用して、妥協することなく同じ結果を得ることができます。 したがって、CおよびObjective-Cソースの ファイルにある複雑なマクロはSwiftコードで使用できません。

nhgrif(ありがとう:-))が指摘しているように、ここでは2つのオプションはラッパーを使用するか、マクロを展開するだけです。

マクロ展開:

# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) 

func PKCS7_type_is_signed(pkcs:UnsafeMutablePointer<PKCS7>)->Bool{ 
    return OBJ_obj2nid(pkcs.memory.type) == NID_pkcs7_signed 
} 

func PKCS7_type_is_data(pkcs:UnsafeMutablePointer<PKCS7>)->Bool{ 
    return (OBJ_obj2nid(pkcs.memory.type) == NID_pkcs7_data) 
} 

ラッパー:

.hファイル:

#import <Foundation/Foundation.h> 
#import "openssl/pkcs7.h" 
#import "openssl/objects.h" 

    @interface OpenSSLWrapper:NSObject 
    + (BOOL)PKCS7TypeIsSigned:(PKCS7*)bio; 
    + (BOOL)PKCS7TypeIsData:(PKCS7*)contents; 
    @end 

.mファイル:

#import "OpenSSLWrapper.h" 

@implementation OpenSSLWrapper 

+ (BOOL)PKCS7TypeIsSigned:(PKCS7*)bio{ 
    return PKCS7_type_is_signed(bio); 
} 

+ (BOOL)PKCS7TypeIsData:(PKCS7*)contents{ 
    return PKCS7_type_is_data(contents); 
} 


@end 
2

マクロは、スウィフトに動作しません。ラッパーを作成する必要があります。

スウィフトは、マクロからタイプ情報を識別できません。 Swiftコンパイラはそのマクロにどのような引数を渡すことができますか?それが分からないので、それをコンパイルしません。

C/Objective-Cでは、これらのマクロはシンプルであることがわかります。&を置き換えてください。マクロはコンパイル前に展開されます。このマクロが展開された場合、.swiftファイルでコンパイルされないコードにはほとんど確実に展開されます。

+0

おかげさまで、マクロを展開することは、朝のように分かりやすいようです。真夜中まで作業をやめなければならないでしょう:-) – CryingHippo