Я использую соединительный заголовок и использую код Objective- C в моем файле swift. В приведенном ниже методе «generateMessageHa sh» я возвратил строку, а затем преобразовал ее в данные, используя строку! .Data (using: String.Encoding.utf32). Это потому, что я должен передать данные в метод "hexRepresentationWithSpaces_AS" в аргумент "nsdata". Даже при том, что это показывает, что я преобразовал правильно, мое ios приложение всегда падает с NSInvalidArgumentException. 'CrytorHelper' и 'FBEncryptorAES' - это мои 2 объективных c класса, из которых я взял методы. Любая идея, почему это происходит?
См. Приведенный ниже код
// преобразование строки в данные в классе Swift
let string = CrytorHelper.generateMessageHash(asBuffer: stringMsg)
let data = string!.data(using: String.Encoding.utf32)
// используйте преобразованные значения данных в приведенном ниже метод в классе swift
let hashValueString = FBEncryptorAES.hexRepresentationWithSpaces_(as: false, nsdata: data)
// 'generateMessageHa sh' реализация метода в цели C
+(NSData *) generateMessageHashAsBuffer :(NSString *) content
{
return [self sha512AsBuffer:content];
}
// интерфейсный класс
+(NSString*)generateMessageHashAsBuffer:(NSString *)content;
// Реализация метода hexRepresentationWithSpaces_ в объекте C
+(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces nsdata:(NSData *)contentData
{
const unsigned char* bytes = (const unsigned char*)[contentData bytes];
NSUInteger nbBytes = [contentData length];
//If spaces is true, insert a space every this many input bytes (twice this many output characters).
static const NSUInteger spaceEveryThisManyBytes = 4UL;
//If spaces is true, insert a line-break instead of a space every this many spaces.
static const NSUInteger lineBreakEveryThisManySpaces = 4UL;
const NSUInteger lineBreakEveryThisManyBytes = spaceEveryThisManyBytes * lineBreakEveryThisManySpaces;
NSUInteger strLen = 2*nbBytes + (spaces ? nbBytes/spaceEveryThisManyBytes : 0);
NSMutableString* hex = [[NSMutableString alloc] initWithCapacity:strLen];
for(NSUInteger i=0; i<nbBytes; ) {
[hex appendFormat:@"%02X", bytes[i]];
//We need to increment here so that the every-n-bytes computations are right.
++i;
if (spaces) {
if (i % lineBreakEveryThisManyBytes == 0) [hex appendString:@"\n"];
else if (i % spaceEveryThisManyBytes == 0) [hex appendString:@" "];
}
}
return hex;
}
// интерфейсный класс
+(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces nsdata:(NSData *)contentData;