如何使用Cocoa或Cocoa Touch框架在Objective-C中转换货币?
答案 0 :(得分:5)
嗯,你不是一个幸运的家伙:
https://github.com/davedelong/DDUnitConverter
只需将整个“DDUnitConverter”子文件夹复制到项目中,然后执行:
#import "DDUnitConverter.h"
#import "DDCurrencyUnitConverter.h"
- (void) convertCurrency {
DDUnitConverter *converter = [DDUnitConverter currencyUnitConverter];
NSNumber *from = [NSNumber numberWithInt:42];
NSNumber *to = [converter convertNumber:from fromUnit:DDCurrencyUnitUKPoundSterling toUnit:DDCurrencyUnitUSDollar];
NSLog(@"new value: %@", to);
}
这将把42英镑兑换成美元。
费率会自动从IMF提取,但如果确实需要,则可以在您的设备转换器实例上调用-refreshExchangeRates
。
-convertNumber:fromUnit:toUnit:
调用将阻止,直到可以下载和解析费率。后续通话将仅使用已下载的汇率。
答案 1 :(得分:1)
其实我选择了:
https://github.com/davedelong/DDUnitConverter
费率是从国际货币基金组织提取的,但在转换期间,使用NSDecimalNumber函数存在问题(decimalNumberByMultiplyingBy和decimalNumberByDividingBy:如果你不使用由字符串创建的NSDecimalNumber var,它们不会给出正确的结果),所以我更正了转换方法像这样,现在它起作用了:
DDUnitConverter.m
#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23, 34, 12, 17, 204, 99, 16};
int main()
{
int d;
for(d = -1; d <= (int)(TOTAL_ELEMENTS - 2); d++)
printf("%d\n", array[d + 1]);
return 0;
}
答案 2 :(得分:0)
另一种方法是使用YQL(Yahoo Query Language)来检索最新的费率。 雅虎的开发网站使得开始使用Objective-C非常容易,而且YQL上有很多SO示例。 http://developer.yahoo.com/social/sdk/objectivec/
你可能会发现雅虎的条款和条款非常好,也很自由。许多数据API的条件。它也比Dave使用的非专用API脆弱得多。 Dave编写了很棒的代码,但IMF TSV文件并不像YQL服务那样保证可用。