NSURLSession のラッパーを作成したいのですが、素敵なコードが見つかりましたが、Swift で書かれていました。https://github.com/daltoniam/SwiftHTTP.しかし、私はまだObjective-Cで本番コードを書いているので、上記のコードのアイデアを借り始めましたが、次のコードを理解してObjective-Cに変換するのに苦労しています(必要に応じて)。AFNetworking を使用できることはわかっていますが、配布可能なフレームワークを構築する際のアーキテクチャの決定により、これは実行できません。
コード:
/// encoding for the request.
public var stringEncoding: UInt = NSUTF8StringEncoding
// Somewhere in a method
var charset = CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding));
if request.valueForHTTPHeaderField(contentTypeKey) == nil {
request.setValue("application/x-www-form-urlencoded; charset=\(charset)",
forHTTPHeaderField:contentTypeKey)
}
request.HTTPBody = queryString.dataUsingEncoding(self.stringEncoding)
私のObjective-Cコード:
@property (assign, nonatomic) NSUInteger stringEncoding;
// In this line I get a compiler warning and in runtime it crashes with BAD_EXC
CFStringEncoding cfStringEncoding = CFStringConvertIANACharSetNameToEncoding(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding));
if (![mutableRequest valueForHTTPHeaderField:ContentTypeKey])
{
[mutableRequest setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%u", (unsigned int)cfStringEncoding] forHTTPHeaderField:ContentTypeKey];
}
mutableRequest.HTTPBody = [queryString dataUsingEncoding:self.stringEncoding];
コンパイラ警告:
Incompatible integer to pointer conversion assigning to 'CFStringEncoding' (aka 'unsigned long') from 'CFStringRef' (aka 'const struct __CFString *')
CFStringEncoding と CFString を扱った経験があまりないので、ドキュメントを翻訳するのは難しいと思います。
この変換は本当に必要ですか? また、その目的は何ですか?