将Swift转换为Objective-C编译器警告说明?
我想围绕NSURLSession创建一个包装器,我发现了一些不错的代码,但是是用Swift编写的。由于我仍然使用Objective-C编写生产代码,我开始借用上述代码的思想,尽管我很难理解以下代码并将其翻译成Objective-C(如果需要)。 我知道我可以使用AFNetworking,但这是不可行的,因为在构建一个可分发的框架时,架构决定了这一点 守则:将Swift转换为Objective-C编译器警告说明?,objective-c,swift,encoding,cfstring,Objective C,Swift,Encoding,Cfstring,我想围绕NSURLSession创建一个包装器,我发现了一些不错的代码,但是是用Swift编写的。由于我仍然使用Objective-C编写生产代码,我开始借用上述代码的思想,尽管我很难理解以下代码并将其翻译成Objective-C(如果需要)。 我知道我可以使用AFNetworking,但这是不可行的,因为在构建一个可分发的框架时,架构决定了这一点 守则: /// encoding for the request. public var stringEncoding: UInt
/// 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)
我的目标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
使用了类似的方法(如果不是相同的话)。您的ObjC代码似乎使用了错误的函数(CFStringConvertIANACharSetNameToEncoding而不是cfStringConvertEncodingToAnaCharsetName)。而且你不能用%u
打印字符串……他们打字错误,我看不见!!我最后使用了下面的答案。