19

これが私の素朴な最初のパスコードです:

var httpUrlResponse: NSHTTPURLResponse? // = (...get from server...)
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"]

このコードのさまざまな派生を試みましたが、allHeaderFields プロパティの NSDictionary 型と String またはオプションの String を取得したいという私の欲求との間の基本的なインピーダンスの不一致に関連するコンパイラの警告/エラーが引き続き発生します。

タイプを強制する方法がわからないだけです。

4

5 に答える 5

1

これは Xcode 6.1 で動作します。

let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as String?

複数のキャストは不要になりました。

また、Swift 1.2 を使用する Xcode 6.3 では、次のように動作します。

let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as? String
于 2014-09-01T21:10:11.690 に答える
0

MIMEType物件をそのまま使っていただけませんか?

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLResponse_Class/#//apple_ref/occ/instp/NSURLResponse/MIMEType

于 2016-07-23T12:55:35.810 に答える
-2

実際にはこれと同じくらい簡単なはずです

NSString* contentType = [[(NSHTTPURLResponse*)theResponse allHeaderFields] valueForKey:@"content-type"];

また

NSString* contentType = [[(NSHTTPURLResponse*)theResponse allHeaderFields][@"content-type"]];

しかし問題は、応答がキーの名前を大文字または小文字として返す可能性があることですが、NSDictionary はキーに関して実際に大文字と小文字を区別するため、キーの大文字と小文字を区別しない独自の検索を行う必要があります。

NSDictionary* allFields = [[(NSHTTPURLResponse*)theResponse allHeaderFields];
NSString* contentType;
for (NSString* key in allFields.allKeys) {
     if ([key compare:@"content-type" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
          // This is it
          contentType = allFields[key];
          break;
     }
 }
于 2014-09-01T19:35:05.263 に答える