小编eha*_*ro2的帖子

运行时的Objective-C动态属性?

是否可以创建一个在运行时可以具有任意数量的动态属性的Objective-C类?

我希望能够mySpecialClass.anyProperty在我的类中调用和拦截它,以便能够提供我自己的自定义实现,然后可以NSString在运行时返回(例如)引发异常.显然这一切都要编译.

理想的情况是,如果我可以使用类似于新文字语法的东西来引用我的属性,例如mySpecialClass["anyProperty"].

我想在某种程度上我想创建类似动态NSDictionary的东西,没有CFDictionary后备存储,它分别在属性获取和设置上执行2个自定义方法,属性名称传递给这些访问器方法,以便他们可以决定做什么.

objective-c

11
推荐指数
1
解决办法
4774
查看次数

在Swift中使用CCCrypt(CommonCrypt)的问题

我正在将一个有效的Objective-C类别(NSData + AESCrypt.m)移植到Swift,我发现了一个与指针一起工作的问题.Swift中加密部分的代码正确编译,但生成运行时EXEC_BAD_ACCES错误.

我到目前为止的代码是(我试图尽可能地剖析代码):

let key = "123456789012345678901234567890120"
let keyLength = UInt(kCCKeySizeAES256 + 1)
let keyPointer = strdup(key)    // Convert key to <UnsafeMutablePointer<Int8>

let message = "Don´t try to read this text. Top Secret Stuff"
let data = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let dataBytes = data?.bytes
let length = data?.length
let dataLength = UInt(length!)
let dataPointer = UnsafePointer<UInt8>(dataBytes!)

let operation: CCOperation = UInt32(kCCEncrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)

let cryptBufferSize = UInt(dataLength + kCCBlockSizeAES128) …
Run Code Online (Sandbox Code Playgroud)

cryptography objective-c ios commoncrypto swift

11
推荐指数
2
解决办法
1万
查看次数

Swift(iOS)和PHP中AES256加密的结果不同

我在AES256工作,能够使用不安全的渠道在iOS和PHP之间加密/解密.

我已经看到很多类似的问题围绕密钥大小,模式(CBC或ECB),随机iv的使用等等.但在这种情况下,我发现了一个奇怪的行为,如下所示.

在两种环境中配置: - 密钥:32字节(256位) - 块大小:128位(标准) - iv:16字节(静态用于测试目的) - 模式:CBC

如果我加密16或32字节的文本(以匹配AES块大小),Swift和PHP中的结果相似但不完全相同:

key ="12345678901234567890123456789012"plainText ="12345678901234567890123456789012"iv ="1234567890123456"

Swift cipher = e5RnnlJkv4QGnGhkMwfvgMHr80NWUVhbvvfCdPQ5V2KyKJTx4KfWmn4HXi4dG0b8 PHP cipher = e5RnnlJkv4QGnGhkMwfvgMHr80NWUVhbvvfCdPQ5V2I =

如您所见,PHP Base64字符串的密码长度和最后2个字符存在差异.

但是,如果我使用的文本不是AES128块大小乘数,请说"Hello World",bot环境会报告不同(但大小相同)的密码,如下所示

Swift cipher = bdwO/5C8a + pliIoIXtuzfA ==

PHP密码= oPotHCkxpOwQhIaCz6hNMw ==

在这两种情况下(Swift和PHP),无论明文的大小如何,都能正确解密密码.此外,Swift结果与代码的Objective-C版本一致

附上使用的简化代码:

PHP

    $key = "12345678901234567890123456789012"; 
    $iv = "1234567890123456";
    $plaintext = "Hello World";
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
    $ciphertext_base64 = base64_encode($ciphertext);
    echo  "ciphertext: ".$ciphertext_base64."</br>";
Run Code Online (Sandbox Code Playgroud)

迅速

let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let keyBytes         = UnsafePointer<UInt8>(keyData.bytes)
let …
Run Code Online (Sandbox Code Playgroud)

php encryption aes ios swift

11
推荐指数
1
解决办法
5348
查看次数

labelColor在Passbook优惠券类型传递中没有响应

所有我的Passbook环境都可以正常工作(基于PHP/MySQL的服务器用于传递生成和签名,以及传递下载 - 基于webview的下载,通过电子邮件传递或使用PassKit在我的应用程序内部显示).

唯一不起作用的是优惠券类型传递的主要字段中labelColor的颜色.

我有(在pass.json文件中):

"foregroundColor" : "rgb(30, 30, 30)",
"backgroundColor" : "rgb(230, 230, 230)",
"labelColor" : "rgb(30, 30, 30)",
Run Code Online (Sandbox Code Playgroud)

foregroundColor和backgroundColor工作正常,但labelColor(显示在条形图像的顶部)是白色的,而不是指定的labelColor.

根据Apple的Passbook包参考,labelColor是可选的

"可选.标签文本的颜色,指定为CSS样式的RGB三元组.例如,rgb(255,255,255).如果省略,标签颜色将自动确定."

在这种情况下,条形图像是一个清晰的图像,因此,文本应该是黑色的(即使省略了labelColor并且颜色自动确定),但尝试在通行证中显示为白色

任何帮助,将不胜感激.

...... e

ios passbook

7
推荐指数
1
解决办法
2456
查看次数

RegularExpression在Swift中matchInString问题

我正在将基于CoreText的应用程序转换为Swift,并且在将匹配项添加到文本中的正则表达式时遇到问题.

这是示例代码

let regexOptions = NSRegularExpressionOptions.CaseInsensitive | NSRegularExpressionOptions.DotMatchesLineSeparators
let regex = NSRegularExpression.regularExpressionWithPattern("(.*?)(<[^>]+>|\\Z)", options: regexOptions, error: nil)
var results: Array<NSTextCheckingResult> = regex.matchesInString(text, options: 0, range: NSMakeRange(0, countElements(text)))
Run Code Online (Sandbox Code Playgroud)

根据文档,该matchesInString函数返回一个数组NSTextCheckingResults,但编译器抱怨声明"类型anyObject []的表达式无法转换为" NSMatchingOptions".任何想法可能在这里出错?

regex core-text swift

4
推荐指数
1
解决办法
3867
查看次数

是否可以在Objective-C中从字符串创建一个块?

我试图在运行时使用char*字符串在Objective-C中创建一个块.但我找不到办法.

我认为Objective-C的动态性质可以做类似的事情

char *blockString = "^(int a, int b) {return a + b;};";
printf("%s\n", blockString);
int (^addBlock)(int a, int b) = (^)*blockString;
int result = addBlock(3, 6);
Run Code Online (Sandbox Code Playgroud)

显然,第三行的语法对于编译器来说太过古怪,但我希望它能让你了解我想要实现的目标.

这可能吗?

objective-c objective-c-blocks

3
推荐指数
1
解决办法
183
查看次数

Swift中SQLite项目中的UnsafePointer <Uint8>问题

我们正在使用Swift在iOS中实现SQLite,而不使用包装器或Objective-C桥接.一切正常,除了在进行查询和提取结果时.问题是UnsafePointer<UInt8>从Swite中的SQLite返回的,如下所示:

var querySQL = "SELECT address, phone FROM CONTACTS WHERE NAME = 'myName'"
var cQuery = querySQL.cStringUsingEncoding(NSUTF8StringEncoding)
var statement: COpaquePointer = nil
if sqlite3_prepare_v2(contactsDB, cQuery!, -1, &statement, nil) == SQLITE_OK {
   if sqlite3_step(statement) == SQLITE_ROW {
   var address : UnsafePointer<UInt8> = sqlite3_column_text(statement, 0)
   var data = NSData(bytes: address, length: 10)
   var string = NSString(data: data, encoding: NSUTF8StringEncoding)
   println(string)
Run Code Online (Sandbox Code Playgroud)

如您所见,如果我们知道对象的长度(在本例中为10),我们可以将指针转换为String

为了深入研究这个问题,我有以下例子

let pointerFromString: UnsafePointer<Int8> = "xyz".cStringUsingEncoding(NSUTF8StringEncoding)
let stringFromPointer = String.fromCString(anotherPointerFromString_Int8)                    println(stringFromPointer!)
Run Code Online (Sandbox Code Playgroud)

鉴于这CChar是别名Int8,我可以将a转换StringUnsafePointer<Int8> …

sqlite pointers ios swift

3
推荐指数
1
解决办法
4067
查看次数

为什么 Swift 报告 CGFloat.pi.significand 恰好是 pi/2?

运行 Xcode 11.3

为什么 pi 的有效成分等于 pi/2?

print(CGFloat.pi.significand == CGFloat.pi/2).   // true
Run Code Online (Sandbox Code Playgroud)

我期望有效值等于尾数。我错过了什么吗?

mantissa cgfloat swift

2
推荐指数
1
解决办法
111
查看次数

无法在iOS Swift中获取SecKey UnsafeMutablePointer

我正在一个涉及RSA加密的swift项目中工作,我遇到了如下指针问题:

我有一个全局var publicKey: SecKey?可选值,我需要获取UnsafeMutablePointer<Unmanaged<SecKey>?>指向它的指针,这是SecKeyGeneratePair函数中所需的数据类型 .

我试图将指针定义为:

var keyPointer = UnsafeMutablePointer<Unmanaged<SecKey>?>(publicKey!)
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨a 不能使用@lvalue SecKey类型的参数调用'init'错误

根据使用Swift with Cocoa和Objective-C的书,在Core FoundationUnmanaged Objects部分中,它声明该Unmanaged<T>结构提供了2种方法takeUnretainedValue()takeRetainedValue().但试图实现它们,会出现以下错误

var keyPointer = UnsafeMutablePointer<Unmanaged<SecKey>?>(publicKey!.takeRetainedValue())
Run Code Online (Sandbox Code Playgroud)

'SecKey'没有名为'takeRetainedValue'的成员

任何帮助解决这个问题将不胜感激

encryption rsa unmanaged ios swift

1
推荐指数
1
解决办法
1370
查看次数