1

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 を扱った経験があまりないので、ドキュメントを翻訳するのは難しいと思います。

この変換は本当に必要ですか? また、その目的は何ですか?

4

1 に答える 1

0

NSString代わりに使用してみてください:

NSString *charset =
        (NSString *)CFStringConvertEncodingToIANACharSetName
        (CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));

これは通常、Swiftバージョンの前に使用されていたものであり、私が思い出したようにAFNetworking(同じではないにしても) 同様の方法を使用していました。

于 2015-02-27T16:54:55.713 に答える