[英]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.