Converting Swift to Objective-C 编译器警告的解释?

Converting Swift to Objective-C explanation of compiler warning?

我想围绕 NSURLSession 创建一个包装器,我发现了一些不错的代码,但是是用 Swift.https://github.com/daltoniam/SwiftHTTP.But 编写的,因为我仍然在 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 的丰富经验,所以我很难翻译文档。

我真的需要这种转换吗?它的目的是什么?

尝试使用 NSString 代替:

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

这是 Swift 版本之前通常使用的方法,我记得 AFNetworking 使用了类似的方法(如果不相同的话)。