[英]Understanding Objective-C
我試圖將代碼從我在Apple的在線示例代碼中找到的方法遷移到Swift,我對Objective-C 有所了解,但缺少一些關鍵漏洞。 我了解以下大多數代碼,非常感謝您提供以下幫助:
1)為什么第一個方法中有兩個return語句? 這兩個語句如何工作?
2)我不完全理解第二種方法的聲明:
“ buf”是一個參考,會迅速用“&”完成嗎?
“ at:(int *)iterator”是什么意思,它將如何迅速起作用?
第二種方法的第一行中的[buf字節]是什么意思?
方法:
- (NSData *)getPublicKeyMod
{
NSData* pk = [self getPublicKeyBits:@"RSA Public Key"];
if (pk == NULL) return NULL;
int iterator = 0;
iterator++; // TYPE - bit stream - mod + exp
[self derEncodingGetSizeFrom:pk at:&iterator]; // Total size
iterator++; // TYPE - bit stream mod
int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator];
return [pk subdataWithRange:NSMakeRange(iterator, mod_size)];
return pk;
NSLog(@"public size: %d",pk.length);
}
- (int)derEncodingGetSizeFrom:(NSData*)buf at:(int*)iterator
{
const uint8_t* data = [buf bytes];
int itr = *iterator;
int num_bytes = 1;
int ret = 0;
if (data[itr] > 0x80) {
num_bytes = data[itr] - 0x80;
itr++;
}
for (int i = 0 ; i < num_bytes; i++)
ret = (ret * 0x100) + data[itr + i];
*iterator = itr + num_bytes;
return ret;
}
1)不適用於兩個語句。 第一個return
語句之后的代碼將永遠不會執行。 此方法串行執行。
2)以下是您的項目符號問題的答案。
在Swift中, buf
不需要與&
一起傳遞,除非您在方法簽名中為第一個參數使用了inout
參數。 不需要這樣做,因為在方法中不會更改buf
對象。
at:(int*)iterator
是一個輸入參數,它定義一個指向Integer的指針。 因為它是一個指針,所以當通過此方法更改它時,它也會在調用者的作用域中更改。 可以使用方法簽名中的inout
關鍵字將其移植到Swift,因為它已被更改,並且調用方法希望在方法完成執行時對其進行更改。 另外,您可以在Swift中更改方法簽名,以返回新的迭代器Integer以及它已經返回的值( ret
),因為Swift允許多個返回值。
[buf bytes]
返回封裝在NSData
實例中的數據; 原始字節。 如果您想進行一些調整,則可以使用bytes
方法獲取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.