ios – 在Swift中为[String:AnyObject]指定一个[String:AnyObject]用分号替换逗号

ios – 在Swift中为[String:AnyObject]指定一个[String:AnyObject]用分号替换逗号,第1张

概述我有 var params = [String:AnyObject]() 我有一个返回[String:AnyObject]的函数.所以,我想将它分配给这样的params键: params["phoneDetails"] = getPhoneDetails() 我面临的问题是,getPhoneDetails()的返回值与params [“phoneDetails”]中的值不同. 这是getPhone 我有

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]用分号替换逗号所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1072504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存