2016-05-16 63 views
6

任何人都有一個想法如何在Swift中使用NSURLRequest配置HTTP標頭?我已經驗證設置我的服務器上,並且只需要傳遞給它的標記,但我無法設置頁眉HTTP標頭w/NSURLRequest在swift中

我的代碼:

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的幫助。有沒有更好的方法來嘗試傳遞標題?

回答

21

在夫特3中,使用URLRequest structure代替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") 
+0

[蘋果的文檔(https://developer.apple.com/documentation/foundation/nsmutableurlrequest)警告說,'Authorization'字段應不使用設​​置這些方法。這是正確的嗎? –

8

您可以創建可變URL請求,然後爲字段名稱設置值。

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

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()