我在Swift iOS应用程序中使用类型Dictionary<String,AnyObject>
的参数列表来保存一些最终将传递给Web服务的参数。如果我要将Bool保存到此字典然后打印它,它将显示为“Optional(1)”,因此它将被转换为int。我不能发送一个int,需要这个“真实”。示例代码如下。
var params = Dictionary<String,AnyObject>()
params["tester"] = true
println(params["tester"])
如何将其保存为实际的真/假值而不是整数?
注意事项
这与AFNetworking一起使用,因此参数必须采用AnyObject!
AFNetworking结构如下:
manager.GET(<#URLString: String!#>, parameters: <#AnyObject!#>, success: <#((AFHTTPRequestOperation!, AnyObject!) -> Void)!##(AFHTTPRequestOperation!, AnyObject!) -> Void#>, failure: <#((AFHTTPRequestOperation!, NSError!) -> Void)!##(AFHTTPRequestOperation!, NSError!) -> Void#>)
'parameters'参数是我在Dictionary<String,AnyObject>
中传递的。
答案 0 :(得分:7)
而不是:
var params = Dictionary<String,AnyObject>()
尝试:
var params = Dictionary<String,Any>()
任何可以表示任何类型的实例,包括函数 类型。
在这种情况下,您似乎需要一个字典,服务期待&#34; true&#34;而不是bool值。
我建议创建一个函数将bool值转换为String并使用它来设置params [&#34; tester&#34;]。
示例:强>
param["tester"] = strFromBool(true)
然后定义函数strFromBool以接受bool参数并返回&#34; true&#34;或&#34;假&#34;取决于它的价值。
答案 1 :(得分:6)
true
确实是1,所以这不是不准确的;它确实存储了Bool,但由于它以AnyObject
的形式出现在另一端,因此它只是将其打印为整数,因为它不知道确切的类型。
您可以尝试将其投射以测试Bool:
var params = Dictionary<String,AnyObject>()
params["tester"] = true
if let boolValue = params["tester"] as? Bool {
println("\(boolValue)")
}
这是安全的方法。