ココアと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
ラッパーを書いてみませんか? – nhgrif