web-dev-qa-db-ja.com

swiftのNSURLRequest付きのHTTPヘッダー

SwiftでNSURLRequestでHTTPヘッダーを設定する方法を知っている人はいますか?サーバーに認証が設定されており、トークンを渡すだけでよいのですが、ヘッダーの設定に問題があります

私のコード:

func getLatestData() {
        var loggedInUsersNumber:String = SharingManager.sharedInstance.userID
        var usersDataPoint:String = StormDataPoint + loggedInUsersNumber
        activityIND.hidden = false
        activityIND.startAnimating()
        let request = NSURLRequest(URL: NSURL(string: usersDataPoint)!)
        let tokenString = SharingManager.sharedInstance.authToken
        //request.setValue("Token " + tokenString, forKey: "Authorization")
        let urlSession = NSURLSession.sharedSession()
        let task = urlSession.dataTaskWithRequest(request, completionHandler: {
            (data, response, error) -> Void in
            if let error = error {
                print(error)
                return }

プロパティ「tokenString」を作成して、ヘッダーに渡すトークンと、コメントアウトした次の行に入れます。 request.setvalue-私はそれをポップし、「データ型をオーバーライドできません」のチューニングにエラーを取得します。すべての検索でObjective Cのヘルプが表示されます。ヘッダーを渡そうとするより良い方法はありますか?

11
James H

Swift 3)で、URLRequestの代わりに NSURLRequest構造体 を使用します(同様に、NSURLURLNSURLSessionURLSessionなど)。

次に、 addValue(_:forHTTPHeaderField:) を使用してヘッダーを追加します。

// Swift 3:
var request = URLRequest(url: URL(string: usersDataPoint)!)
request.addValue("Token \(tokenString)", forHTTPHeaderField: "Authorization")

Swift 2.2では、 NSMutableURLRequest 変更する必要がある場合。

// Swift 2:
let request = NSMutableURLRequest(URL: NSURL(string: usersDataPoint)!)
request.addValue("Token \(tokenString)", forHTTPHeaderField: "Authorization")
34
kennytm

可変URLリクエストを作成してから、フィールド名の値を設定できます。

let request = NSMutableURLRequest(URL: NSURL(string: yourURLString)!)
request.setValue("\(yourValue)", forHTTPHeaderField: "Header-field-name")
9
iThanh

Swift3のより大きな例

var req: URLRequest = /* create requets */
req.setValue("Bearer Y3GzLG2x6wSXihmUGhwGFw", forHTTPHeaderField: "Authorization")
req.timeoutInterval = 10
let task = URLSession.shared.dataTask(with: req, completionHandler: { (data, response, error) in
    print("completionHandler invoked")
})
task.resume()
0
neoneye