迅捷 – 词典的扩展
发布时间:2020-12-14 05:51:32 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个字典扩展名,其中Dictionary是 String,AnyObjectgt ;. 在许多地方看,尝试不同的做法,但是似乎都没有。这是其中之一: extension Dictionary where String,AnyObject{ var jsonString:String { return "" }} 由于某种原因实际上没有工作
我正在尝试创建一个字典扩展名,其中Dictionary是< String,AnyObject> ;. 在许多地方看,尝试不同的做法,但是似乎都没有。这是其中之一:
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 "" } } Got:参数类型’Dictionary’不符合预期类型的??“AnyObject”
> = 3.1
从3.1,我们可以做具体的扩展,即: extension Dictionary where Key == String {} < 3.1 我们不能符合具体的具体类型,即: extension Dictionary where Key == String 然而,由于Dictionary符合序列,我们可以使用具体泛型的协议类型,我们可以做: extension Sequence where Iterator.Element == (key: String,value: AnyObject) { func doStuff() {... 否则,我们可以约束我们的密钥到一个协议,字符串符合如下: extension Dictionary where Key: StringLiteralConvertible,Value: AnyObject { var jsonString: String { return "" } } 根据您更新的答案。 Json序列化需要一个对象,Swift Dictionaries是结构体。您需要转换为NSDictionary您必须指定Key以符合NSObject才能正确转换为NSDictionary。
extension Dictionary where Key: NSObject,Value:AnyObject { var jsonString:String { do { let stringData = try NSJSONSerialization.dataWithJSONObject(self as NSDictionary,encoding: NSUTF8StringEncoding){ return string } }catch _ { } return "" } } 请注意,字典必须符合此类型才能访问扩展名。 let dict = ["k" : "v"] 将变成type [String:String],所以你必须明确地声明: let dict: [NSObject : AnyObject] = ["k" : "v"] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |