gpt4 book ai didi

swift - 字典的扩展 where

转载 作者:IT王子 更新时间:2023-10-29 05:01:52 26 4
gpt4 key购买 nike

我正在尝试创建字典扩展,其中字典的类型为

看了很多地方,尝试了不同的方法,但似乎都没有用。这是其中之一:

extension Dictionary where <String, AnyObject>{
var jsonString:String {
return ""
}
}

另一种由于某种原因实际上不起作用的方法:

extension Dictionary where Key:Hashable, Value:AnyObject {

var jsonString:String {

do {
let stringData = try NSJSONSerialization.dataWithJSONObject(self, options: NSJSONWritingOptions.PrettyPrinted)
if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
return string
}
}catch _ {

}
return ""
}
}

得到:参数类型“Dictionary”不符合预期的“AnyObject”类型

最佳答案

>=3.1

从3.1开始,我们可以做具体的扩展,即:

extension Dictionary where Key == String {}

<3.1

我们不能使用具体泛型来符合具体类型,即:

extension Dictionary where Key == String

但是,因为 Dictionary 符合序列并且我们可以使用具体泛型来符合协议(protocol)类型,我们可以这样做:

extension Sequence where Iterator.Element == (key: String, value: AnyObject) {
func doStuff() {...

否则,我们可以将我们的 key 限制为字符串符合的协议(protocol),如下所示:

extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
var jsonString: String {
return ""
}
}

根据您更新的答案。 Json 序列化需要一个对象,Swift 字典是结构体。您需要转换为 NSDictionary 您必须指定 Key 以符合 NSObject 以正确转换为 NSDictionary

Small note: Dictionaries already type constrain Key to be Hashable, so your original constraint wasn't adding anything.

extension Dictionary where Key: NSObject, Value:AnyObject {

var jsonString:String {

do {
let stringData = try NSJSONSerialization.dataWithJSONObject(self as NSDictionary, options: NSJSONWritingOptions.PrettyPrinted)
if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
return string
}
}catch _ {

}
return ""
}
}

请注意,字典必须符合此类型才能访问扩展。

let dict = ["k" : "v"]

将成为 [String : String] 类型,因此您必须明确声明:

let dict: [NSObject : AnyObject] = ["k" : "v"]

关于swift - 字典的扩展 where <String, AnyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32610150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com