HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 在Swift中为[String:AnyObject]指定一个[String:AnyObject]用分号替换逗号大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有

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.description

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。