var params = [String:AnyObject]()
我有一个返回[String:AnyObject]的函数.所以,我想将它分配给这样的params键:
params["phoneDetails"] = getPhoneDetails()
我面临的问题是,getPhoneDetails()的返回值与params [“phoneDetails”]中的值不同.
这是getPhoneDetails()的输出
[locale: en,ostype: 32bit,appversion: 4.0.0,architecture: x86,version: 8.1]
这是params [“phoneDetails”]的输出:
Optional({ appversion = "4.0.0"; architecture = "x86 "; locale = en; ostype = 32bit; version = "8.1";})
因此,当使用println(params [“phoneDetails”])时,我看到了一个分号而不是逗号.
我希望它与getPhoneDetails的返回类型相同.我究竟做错了什么?
解决方法 原因是Swift隐式将你的Swift.Dictionary转换为NSDictionary:let d: [String:AnyObject] = ["one":"1","two":"2"]// Swift.Dictionary implements Printable.description // (which println uses) as [key:value,key:value]d.descriptionlet nsd = d as NSDictionary// NSDictionary on the other hand,implements// it as {\n key = value;\n key = value;\n}nsd.description
转换的原因是您使用AnyObject.理论上,AnyObject只能存储引用类型(即类).在游乐场中尝试以下 *** 作,顶部没有任何import语句,即删除import UIKit或其他:
// this won’t even compile - Strings aren’t classes,they’re structs// so you can’t assign them to AnyObjectlet d: [String:AnyObject] = ["one":"1","two":"2"]// this fixes that:let e: [String:String] = ["one":"1","two":"2"]// but this won’t compile:let o: AnyObject = e // [String:String] doesn’t conform to protocol AnyObject
但是导入基金会并突然发生魔术.实际上有两点魔法:字符串文字现在可以创建Nsstring对象,它们是类,因此符合AnyObject. Swift词典可以静默地转换为NSDictionary对象,它们也是符合AnyObject的类.后一个是你正在发生的事情,所以你得到一个不同的输出,因为你的类型确实是一个不同的类型.
如果你不希望它们是不同的类型,你有两个选择 – 从你的getPhoneDetails函数(ick)返回一个NSDictionary或者停止使用AnyObject,而是声明你的字典是[String:[String:String]]类型(但是,导致更强的类型和值而不是引用语义,这可能意味着必须重构其他代码).
(或者我猜你可以切换到[String:Any]但是有疯狂)
总结以上是内存溢出为你收集整理的ios – 在Swift中为[String:AnyObject]指定一个[String:AnyObject]用分号替换逗号全部内容,希望文章能够帮你解决ios – 在Swift中为[String:AnyObject]指定一个[String:AnyObject]用分号替换逗号所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)