无法从 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 不起作用...