无法从 allHeaderFields 字典中获取值
Can't get values out of allHeaderFields dictionary
出于某种原因,我无法从 swift 中需要的字典中的键中获取正确的值。这适用于 objective c..
var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: navigationAction.request.URL!)
newRequest.HTTPMethod = "HEAD"
var response: NSURLResponse?
var filename: AnyObject?
var filetype: AnyObject?
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil)
if let httpResponse = response as? NSHTTPURLResponse {
let allHeaders = httpResponse.allHeaderFields
filename = allHeaders["sfn-Document-Filename"]
let typeString: AnyObject? = allHeaders["Content-Type"]
let typeArray: Array = typeString!.componentsSeparatedByString("/")
filetype = typeArray[1]
}
这个字典对象看起来像这样 allHeaders [NSObject : AnyObject] 6 key/value pairs
。
这是仍然有效的 objective c。
NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[request URL]];
[newRequest setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error: NULL];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dictionary = [response allHeaderFields];
filename = [[response allHeaderFields] objectForKey:@"sfn-Document-Filename"];
NSString *typeString = [dictionary objectForKey:@"Content-Type"];
NSArray *typeArray = [typeString componentsSeparatedByString:@"/"];
filetype = [typeArray objectAtIndex:1];
}
它不需要像 Obj-C 那样完成,它只是有效而且似乎是一个很好的起点。
我得到的文件名值是 filename = (AnyObject?) Some
我试过将其更改为:
var filename: String?
filename = allHeaders["sfn-Document-Filename"] as? String
但现在我得到一个 nil String 并且 Thread 1: EXC_BAD_ACCESS (code=1, address=0x20)
这一切发生的原因是因为字典中键的值似乎是一个 NSString
而它无法用 String
找到它(我认为他们应该可以互换吗?)。
无论哪种方式。这样做有效:
var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: request.URL!)
newRequest.HTTPMethod = "HEAD"
var response: NSURLResponse?
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil)
var filename: NSString?
var filetype: String?
if let httpResponse = response as? NSHTTPURLResponse {
let headerString = "sfn-Document-Filename"
let headerNSString: NSString = (headerString as NSString)
let filetypeString = "Content-Type"
let filetypeNSString: NSString = (filetypeString as NSString)
var allHeaders = httpResponse.allHeaderFields
filename = allHeaders[headerNSString] as? NSString
let typeString = allHeaders[filetypeNSString] as? NSString
let typeArray = typeString!.componentsSeparatedByString("/")
filetype = typeArray[1]
}
现在我只需要弄清楚为什么 componentsSeparatedByString
不起作用...
出于某种原因,我无法从 swift 中需要的字典中的键中获取正确的值。这适用于 objective c..
var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: navigationAction.request.URL!)
newRequest.HTTPMethod = "HEAD"
var response: NSURLResponse?
var filename: AnyObject?
var filetype: AnyObject?
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil)
if let httpResponse = response as? NSHTTPURLResponse {
let allHeaders = httpResponse.allHeaderFields
filename = allHeaders["sfn-Document-Filename"]
let typeString: AnyObject? = allHeaders["Content-Type"]
let typeArray: Array = typeString!.componentsSeparatedByString("/")
filetype = typeArray[1]
}
这个字典对象看起来像这样 allHeaders [NSObject : AnyObject] 6 key/value pairs
。
这是仍然有效的 objective c。
NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[request URL]];
[newRequest setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error: NULL];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dictionary = [response allHeaderFields];
filename = [[response allHeaderFields] objectForKey:@"sfn-Document-Filename"];
NSString *typeString = [dictionary objectForKey:@"Content-Type"];
NSArray *typeArray = [typeString componentsSeparatedByString:@"/"];
filetype = [typeArray objectAtIndex:1];
}
它不需要像 Obj-C 那样完成,它只是有效而且似乎是一个很好的起点。
我得到的文件名值是 filename = (AnyObject?) Some
我试过将其更改为:
var filename: String?
filename = allHeaders["sfn-Document-Filename"] as? String
但现在我得到一个 nil String 并且 Thread 1: EXC_BAD_ACCESS (code=1, address=0x20)
这一切发生的原因是因为字典中键的值似乎是一个 NSString
而它无法用 String
找到它(我认为他们应该可以互换吗?)。
无论哪种方式。这样做有效:
var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: request.URL!)
newRequest.HTTPMethod = "HEAD"
var response: NSURLResponse?
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil)
var filename: NSString?
var filetype: String?
if let httpResponse = response as? NSHTTPURLResponse {
let headerString = "sfn-Document-Filename"
let headerNSString: NSString = (headerString as NSString)
let filetypeString = "Content-Type"
let filetypeNSString: NSString = (filetypeString as NSString)
var allHeaders = httpResponse.allHeaderFields
filename = allHeaders[headerNSString] as? NSString
let typeString = allHeaders[filetypeNSString] as? NSString
let typeArray = typeString!.componentsSeparatedByString("/")
filetype = typeArray[1]
}
现在我只需要弄清楚为什么 componentsSeparatedByString
不起作用...