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
使用了类似的方法(如果不相同的话)。
我想围绕 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
使用了类似的方法(如果不相同的话)。