簡體   English   中英

Swift 2:如何為AnyObject分配字典?

[英]Swift 2: How can i assign a dictionary to AnyObject?

我使用的是Swift 1.2,一切都很好。 將我的Xcode升級到7之后。 我遇到了一些奇怪的問題。

我的代碼是:

let postData : AnyObject = ["username":username , "password":password] ;

我需要此變量為AnyObject,因為

    let jsonObject : AnyObject = postData ;
    let jsonString = JSONStringify(jsonObject)
    let data1 = jsonString.dataUsingEncoding(NSUTF8StringEncoding)

    let task1 = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: data1) {
        (Data, Response, Error) -> Void in

需要一個Anyobject作為發布數據標頭。

錯誤是

 Value of type '[String : String?]' does not conform to specified type 'AnyObject' 

誰能幫我?

我假設您正在將參數傳遞給要求鍵為String的請求,而值可以是AnyObject 嘗試這個:

let postData: [String: AnyObject] = ["username":username , "password":password]

還要確保用戶名和密碼不是可選的,在這種情況下,請使用! 如果您確定會有價值,則將它們拆開。

let postData: [String: AnyObject] = ["username":username!, "password":password!]

或者你可以使用

let postData: [String: AnyObject] = ["username":username ?? "", "password":password ?? ""]

問題是您的密碼變量是Optional<String> 這意味着從Swift字典到AnyObject的轉換(我認為它將嘗試將其轉換為NSDictionary)將失敗。

如果你這樣做

let postData : AnyObject = ["username":username , "password":password!]

除非密碼為nil,否則它應該可以工作(在創建字典之前檢查)

如果您希望輸出密碼為空,則可以在字典中執行此操作

let postData : [String : AnyObject] = ["username":username , "password":password ?? NSNull()]

以下作品

let pw: String? = "pw"
let pw2: String? = nil
var foo: [String : AnyObject] = ["bar" : pw ?? NSNull(), "baz" : pw2 ?? NSNull()]

let data = try NSJSONSerialization.dataWithJSONObject(foo, options: NSJSONWritingOptions.PrettyPrinted)

let str = NSString(data: data, encoding: NSUTF8StringEncoding)!

print(str)

和印刷品

{
  "baz" : null,
  "bar" : "pw"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM